如何在neo4j中创建最后一个节点?

时间:2014-08-29 01:17:49

标签: neo4j

所以我知道你创建节点时neo4j每个节点都有一个UUID。我知道您可以通过访问ID来访问该UUID的特定节点。例如:

START n=node(144) RETURN n;

我如何获得最后创建的节点?我知道我可以显示所有节点,然后在带有相应ID的anotehr查询中运行相同的命令,但有没有办法快速完成此操作?我可以按ID订购节点并限制1吗?有更简单的方法吗?无论哪种方式,我都没有想通过简单的密码查询来解决这个问题。

3 个答案:

答案 0 :(得分:5)

每次都不能保证新节点的id始终大于以前创建的所有节点,

因此,更好的方法是设置created_at属性,该属性在创建节点时存储当前时间戳。 您可以使用timestamp()函数存储当前时间戳

然后,

Match (n)
Return n
Order by n.created_at desc
Limit 1

答案 1 :(得分:2)

请注意,Neo4j的内部节点ID不是UUID。也不保证新节点总是具有比所有先前创建的节点更大的id。节点id是(乘以一些常量)节点在存储文件中的位置的偏移量。由于空间回收,新节点可能会获得较低的ID号。

大胖警告:不要对节点ID采取任何假设。

根据您的要求,您可以将所有节点组织到链接列表中。有一个具有特定标签的“神奇”节点,例如References始终与最新创建的节点有关系:

CREATE (entryPoint:Reference {to:'latest'}) // create reference node

创建域中的节点后,您需要执行多项操作:

  1. 删除latest关系,如果现有
  2. 创建您的节点
  3. 将您的新节点连接到以前的最新节点
  4. 创建参考链接
  5. 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
    

答案 2 :(得分:-1)

我终于找到了答案。 ID()函数将返回节点的neo4j ID:

Match (n) Return n Order by ID(n) desc Limit 1;