2016-12-06 2 views
0

Я новичок в Neo4j, поэтому, возможно, я просто совершенно не прав, но я попробую!Хранение дат как узлов в Neo4j

Наши данные в основном состоят из оговорок, пользователей и объектов, хранящихся в виде узлов.
Мне нужно обоим, чтобы подсчитать общие резервы, которые произошли в определенный период времени, и общий доход (хранящийся как reservation.income) в этот период времени.

Я решил преодолеть проблему, создав дату как узел, таким образом, я могу назначить связь [:PURCHASED_ON] ко всем оговоркам, которые произошли в конкретную дату.

Насколько я понял, создавая дату в качестве узла может дать мне несколько плюсов:

  • Я мог бы разделить дату от дд/мм/гггг и хранить их как целые свойства, в таким образом, я мог бы использовать математические операторы, такие как> и <
  • я мог бы создать ярлык для узла, представляющего каждый месяц, как слово
  • это должно быть легче подводить() доход на один день или месяц

Основном, я думал о делать что-то вроде этого

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

я видел, что возможное решение могло бы создать узел для каждого года, каждый месяц (1-12) и каждый день (1-31) , но я думаю, что это просто усложнило бы архитектуру моего Графа, так как каждая оговорка имеет «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.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 с просьбой о том, чтобы имена были сделаны singluar.

+0

Спасибо за ответ, я не знал APOC и выглядит очень интересно! –

2

Возможно, вы захотите посмотреть на GraphAware TimeTree library, поскольку обработка даты - сложная вещь, и это, кажется, логический вывод о направлении, в котором вы собираетесь двигаться. TimeTree также поддерживает поиск событий, связанных с вашим деревом времени между диапазонами дат, после чего вы можете выполнять дальнейшие операции (подсчет, суммирование доходов и т. Д.).

+0

спасибо! Я рассмотрю его –