在Gremlin中正确处理日期操作

时间:2018-10-27 08:38:33

标签: gremlin tinkerpop3 amazon-neptune

我将AWS Neptune Gremlin与gremlin_python一起使用。

我在媒体资源中的日期按照Neptune specs的要求存储为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年的顶点”

1 个答案:

答案 0 :(得分:4)

就个人而言,我更喜欢将日期/时间值存储为自大纪元以来的天/秒/毫秒。这绝对可以在任何Graph DB上使用,并使范围查询更加简单。另外,转换为从纪元开始到返回的天数或秒数应该是几乎任何语言的简单方法调用。

因此,当您创建属性字典时,可以通过将其更改为以下内容来简化代码:

properties_dict['my_date'] = my_date

...如my_date代表自纪元以来的秒数。范围查询将非常简单:

g.V().has("Object", "my_date", P.between(startTimestamp, endTimestamp)).
  limit(3).valueMap(True)