2014-08-29 63 views
3

所以我知道當你創建節點時,neo4j爲每個節點都有一個UUID。我知道你可以通過訪問該ID來訪問該UUID的特定節點。例如:如何獲得在neo4j中創建的最後一個節點?

START n=node(144) RETURN n;

我怎麼會得到所創建的最後一個節點?我知道我可以顯示所有節點,然後使用相應的ID在anotehr查詢中運行相同的命令,但有沒有辦法快速執行此操作?我可以通過id命令節點並限制1嗎?有一種更簡單的方法嗎?無論哪種方式,我還沒有想通過一個簡單的密碼查詢如何做到這一點。

回答

4

每次不能保證新的節點總是比所有以前創建的節點更大的ID,

所以最好的方法是設置在創建節點存儲當前時間戳created_at屬性。 您可以使用時間戳()函數來存儲當前時間戳

然後,

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

我終於找到答案。該ID()函數將返回Neo4j的ID爲節點:

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

+1

並非總是如此.. 因爲節點ID可以改變 – 2015-06-20 11:07:04

2

請注意,Neo4j的內部節點ID不是UUID。也不保證新節點總是具有比以前創建的所有節點更大的ID。節點ID是(乘以某個常量)存儲文件內節點位置的偏移量。由於空間回收,新節點可能會獲得較低的ID號。

BIG FAT警告:不要對節點id做任何假設。

根據您的要求,您可以將所有節點組織到鏈接列表中。有一個具有特定標籤的「魔術」節點,例如, References這一直到最新創建的節點的關係:

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

在創建從您的域的節點,需要採取多種措施:

  1. 刪除latest關係,如果存在的話
  2. 創建您的節點
  3. 將您的新節點連接到先前的最新節點
  4. 創建參考鏈接

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