如何使用Cypher请求获取节点的ID?

30

我正在使用 neo4j 并执行以下查询:

MATCH (n:Person) RETURN n.name LIMIT 5

我已经获取了名称,但还需要相应的ID。请帮帮我!

3个回答

59

由于ID不是属性,因此使用ID函数返回它。

MATCH (n:Person) RETURN ID(n) LIMIT 5

1
谢谢您的快速回复 :) (这是正确的) - Aleksandrenko
+subvertallchris 有没有一种方法可以将返回值映射到哈希映射中,因为这种方式的响应只是一个数组;现在:[4,'George'] 我想要的是:{id:4,name:'George'} - Aleksandrenko
4
实际上,你只需要像这样做。 MATCH (n:Person) RETURN { id: ID(n), name: n.name } as user LIMIT 5 - subvertallchris
1
@subvertallchris 如果节点具有一百个属性或在查询时无法确定属性(因为没有模式),则此方法并不实用。是否有一种方法可以返回一个带有额外计算属性的节点,但不需要在RETURN子句中重构整个节点作为节点文字? - Szczepan Hołyszewski
大家在这里要小心谨慎!您永远不应该在某些第三方数据库中使用 id 的节点作为引用。如果节点被删除,下一个创建的节点会重用您刚删除的节点的旧 ID 值(因为现在是空闲状态)。这将留下一个悬空引用。请在此处阅读更多信息(https://neo4j.com/blog/dark-side-neo4j-worst-practices)。 - DurkoMatko

3
不确定这个翻译对您有多大帮助或相关性,但是当我使用NodeJS API时,从Cypher查询返回的记录对象在与属性对象相同的级别上具有identity字段(例如record.get(0).properties,record.get(0).identity)。我假定您不仅仅是进行常规的Cypher查询,并且实际上使用驱动程序发送查询 - 因此,您可能不必运行另一个MATCH语句。
我知道OP正在特别询问Cypher - 但其他用户可能会遇到这个问题,所以这也许会有所帮助。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接