2014-05-03 77 views
3

我正在嘗試查詢最近創建的10個節點的數據庫。我有嘗試Neo4j Cypher與時間戳查詢

MATCH (a:Post) RETURN a ORDER BY TIMESTAMP() LIMIT 10 

我也試過這種

MATCH (a:Post) RETURN a ORDER BY TIMESTAMP() DESC LIMIT 10 

如果我創建一個內容節點{一,二,三}的順序,無論是查詢產生的節點的順序一,二,三個。任何想法或想法爲什麼發生這種情況?

+1

不會有一個簡單的'ORDER BY n.timestamp DESC LIMIT 10'解決這個問題嗎? –

+0

我試圖實現DESC,但它給了我相同的結果,您是否必須爲節點指定時間戳屬性或者是否自動創建? – user3494794

+1

創建節點時,您必須自己指定它:'CREATE(:Post {title:{title},content:{content},timestamp:timestamp()})' –

回答

5

TIMESTAMP()是一個scalar function表示查詢執行的確切時間。它與創建節點或關係的時間沒有任何關係。

這就是爲什麼你會得到兩個查詢完全相同的結果。您只是按當前時間排序,因爲當前時間對於所有記錄完全相同,所以這沒有多大意義。

Neo4j默認不存儲任何創建時間戳。如果它對您很重要,您需要將它們作爲附加屬性進行存儲。這是你應該使用標量函數的地方。

CREATE (:Post {created_at: TIMESTAMP()}) 

一旦完成,匹配和這樣的順序。

MATCH (a:Post) RETURN a ORDER BY a.created_at LIMIT 10 

注意,你是被created_at財產排序,而不是TIMESTAMP()標量函數。