所以我知道当你创建节点时,neo4j为每个节点都有一个UUID。我知道你可以通过访问该ID来访问该UUID的特定节点。例如:如何获得在neo4j中创建的最后一个节点?
START n=node(144) RETURN n;
我怎么会得到所创建的最后一个节点?我知道我可以显示所有节点,然后使用相应的ID在anotehr查询中运行相同的命令,但有没有办法快速执行此操作?我可以通过id命令节点并限制1吗?有一种更简单的方法吗?无论哪种方式,我还没有想通过一个简单的密码查询如何做到这一点。
所以我知道当你创建节点时,neo4j为每个节点都有一个UUID。我知道你可以通过访问该ID来访问该UUID的特定节点。例如:如何获得在neo4j中创建的最后一个节点?
START n=node(144) RETURN n;
我怎么会得到所创建的最后一个节点?我知道我可以显示所有节点,然后使用相应的ID在anotehr查询中运行相同的命令,但有没有办法快速执行此操作?我可以通过id命令节点并限制1吗?有一种更简单的方法吗?无论哪种方式,我还没有想通过一个简单的密码查询如何做到这一点。
每次不能保证新的节点总是比所有以前创建的节点更大的ID,
所以最好的方法是设置在创建节点存储当前时间戳created_at属性。 您可以使用时间戳()函数来存储当前时间戳
然后,
Match (n)
Return n
Order by n.created_at desc
Limit 1
我终于找到答案。该ID()函数将返回Neo4j的ID为节点:
Match (n) Return n Order by ID(n) desc Limit 1;
请注意,Neo4j的内部节点ID不是UUID。也不保证新节点总是具有比以前创建的所有节点更大的ID。节点ID是(乘以某个常量)存储文件内节点位置的偏移量。由于空间回收,新节点可能会获得较低的ID号。
BIG FAT警告:不要对节点id做任何假设。
根据您的要求,您可以将所有节点组织到链接列表中。有一个具有特定标签的“魔术”节点,例如, References
这一直到最新创建的节点的关系:
CREATE (entryPoint:Reference {to:'latest'}) // create reference node
在创建从您的域的节点,需要采取多种措施:
latest
关系,如果存在的话。
MATCH (entryPoint:Reference {to:'latest'})-[r:latest]->(latestNode)
CREATE (domainNode:Person {name:'Foo'}), // create your domain node
(domainNode)-[:previous]->(latestNode), // build up a linked list based on creation timepoint
(entryPoint)-[:latest]->(domainNode) // connect to reference node
DELETE r //delete old reference link
并非总是如此.. 因为节点ID可以改变 – 2015-06-20 11:07:04