Я использую AWS Neptune Gremlin с gremlin_python
.
Моя дата в собственности сохраняется как datetime, как требуется в Характеристики Нептуна.
Я создал его, используя код 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()
Как лучше всего работать с датой или датой и временем в Gremlin?
Как я могу выполнять запросы диапазона, такие как "дай мне все вершины, у которых есть дата в 2017 году"?
Лично я предпочитаю хранить значения даты / времени как дни / секунды / миллисекунды с начала эпохи. Это определенно будет работать с любой базой данных Graph и значительно упростит запросы диапазона. Кроме того, преобразование в дни или секунды с начала эпохи и обратно должно быть простым вызовом метода практически на любом языке.
Итак, когда вы создаете свой словарь свойств, вы можете упростить свой код, изменив его на:
properties_dict['my_date'] = my_date
... поскольку my_date
должен представлять количество секунд с начала эпохи. А запрос диапазона будет таким же простым, как:
g.V().has("Object", "my_date", P.between(startTimestamp, endTimestamp)).
limit(3).valueMap(True)
Точнее, тогда вы имеете дело только с целыми числами.
с этим подходом вы можете выполнять запросы диапазона для целого числа, хранящегося в свойстве, или оно сохраняется как строка? Не могли бы вы объяснить с помощью простого примера запроса?