Правильная обработка операций с датами в Гремлин

Я использую AWS Neptune Gremlin с gremlin_python,

Моя дата в собственности хранится как datetime, как требуется в спецификациях Neptune.

Я создал его с помощью кода Python, как это:
properties_dict['my_date'] = datetime.fromtimestamp(my_date, timezone.utc)
а затем построил вершину со свойствами:

for prop in properties:
    query += """.property("%s", "%s")"""%(prop, properties[prop])

Позже, взаимодействуя с построенным графом, я смог найти вершины только по запросу с точным совпадением строк, как показано ниже:
g.V().hasLabel('Object').has("my_date", "2017-12-01 00:00:00+00:00").valueMap(True).limit(3).toList()

Как лучше всего обращаться с датой или датой-временем в Гремлин?
Как я могу сделать диапазон запросов, таких как "дать мне все вершины, которые имеют дату в 2017 году"?

1 ответ

Лично я предпочитаю хранить значения даты / времени в днях / секундах / миллисекундах с начала эпохи. Это определенно будет работать с любой базой данных Graph и значительно упростит запросы диапазона. Кроме того, преобразование в дни или секунды, начиная с эпох и обратно, должно быть простым вызовом метода практически на любом языке.

Итак, когда вы создаете свой словарь свойств, вы можете упростить свой код, изменив его на:

properties_dict['my_date'] = my_date

... как my_date должен представлять количество секунд с начала эпохи. И запрос диапазона будет так же прост:

g.V().has("Object", "my_date", P.between(startTimestamp, endTimestamp)).
  limit(3).valueMap(True)
Другие вопросы по тегам