2016-12-06 24 views
0

我是Neo4j的新手,所以也許我完全錯了,但是我會試一試!在Neo4j中存儲日期作爲節點

我們的數據主要由保留,用戶和設施作爲節點存儲。
我需要同時計算特定時間範圍內發生的總預訂量以及此時間段內的總收入(存儲爲reservation.income)。

我想通過創建日期作爲節點來解決問題,通過這種方式,我可以將關係[:PURCHASED_ON]分配給在特定日期發生的所有保留。

據我瞭解,創建日期作爲節點可以給我幾個優點:

  • 我可以從DD/MM/YYYY分裂的日期,並將它們存儲爲整數性能,我可以創建爲代表每個月爲一個字節點的標籤,這樣我可以用數學運算符,如>和<
  • 它應該是比較容易的SUM()在一天的收入或一個月

基本上,我在想這樣做這樣的事情

CREATE (d:Day {name:01/11/2016 day: TOINT(01), month: TOINT(11), year: TOINT(2016)} 

我看到一個可能的解決辦法是建立每年一個節點,每一個月份(1-12),每天(1-31) ,但我認爲這會使我的Graph的架構變得非常複雜,因爲每個預留都有一個「insert_date」(它創建的那一天),然後是官方的「reservation_date」(它到期的那一天)。

我在這裏的東西,還是隻是在浪費時間?謝謝!

+1

可能的重複[如何在neo4j中處理日期](http://stackoverflow.com/questions/29343767/how-to-handle-dates-in-neo4j) –

回答

1

有很多date/time functions in the APOC plugin,你應該看看。

舉個例子,你可以使用apoc.date.fields(由APOC文檔舊稱apoc.date.fieldsFormatted錯誤地稱呼)來獲得的年,月,日就擺在您的節點:

WITH '01/11/2016' AS d 
WITH apoc.date.fields(d, 'MM/dd/yyyy') AS f 
CREATE (d:Day {name: d, day: f.days, month: f.month, year: f.years}); 

注:返回地圖中的屬性具有奇怪複數的名稱。我已提交an issue,要求將名稱拼成單數。

+0

感謝您的回答,我不知道APOC,它看起來非常有趣! –

2

您可能想看看GraphAware TimeTree library,因爲日期處理是一件複雜的事情,而且這似乎是您要走向的邏輯結論。 TimeTree還支持在日期範圍內查找附加到時間樹的事件,在此時您可以執行進一步的操作(計數,收入總和等)。

+0

謝謝!我會研究它 –

相關問題