Правильная обработка операций с датами в Гремлин
Я использую 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)