Neo4j 小精灵:日期过滤器

Neo4j 小精灵:日期过滤器,neo4j,gremlin,amazon-neptune,Neo4j,Gremlin,Amazon Neptune,基于日期字段的过滤图数据库:我搜索了,但没有找到相同的文档 做了一些研究,似乎lt,gt等都在起作用。但我下面的方法正确吗?还是有一个正式的方法来做? 以下代码适用于Neptune和NEO4J,但此代码独立于供应商 也发现了一个4/5年,建议使用长,但我认为它相当旧 样本数据: g.addV("TestDate2").property("title", "Alpha").property("date", "01-19-2018") g.addV("TestDate2").property("t

基于日期字段的过滤图数据库:我搜索了,但没有找到相同的文档

做了一些研究,似乎
lt
gt
等都在起作用。但我下面的方法正确吗?还是有一个正式的方法来做? 以下代码适用于Neptune和NEO4J,但此代码独立于供应商

也发现了一个4/5年,建议使用长,但我认为它相当旧


样本数据:

g.addV("TestDate2").property("title", "Alpha").property("date", "01-19-2018")
g.addV("TestDate2").property("title", "Bravo").property("date", "02-20-2018")
g.addV("TestDate2").property("title", "Charlie").property("date", "03-13-2018")
g.addV("TestDate2").property("title", "Delta").property("date", "04-14-2018")
g.addV("TestDate2").property("title", "Echo").property("date", "05-15-2018")
g.addV("TestDate2").property("title", "Foxtrot").property("date", "06-16-2018")
g.addV("TestDate2").property("title", "Hotel").property("date", "07-17-2018")
g.addV("TestDate2").property("title", "India").property("date", "08-18-2018")
查询

(我对输出的数据进行了格式化,使其与Gremlin输出不匹配,但可读性更强)

小于

g.V().has("TestDate2", "date", lt("03-03-2018")).valueMap()
{'date': ['02-20-2018'], 'title': ['Bravo']}
{'date': ['01-19-2018'], 'title': ['Alpha']}

g.V().has("TestDate2", "date", lt("03-24-2018")).valueMap()
{'date': ['03-13-2018'], 'title': ['Charlie']}
{'date': ['02-20-2018'], 'title': ['Bravo']}
{'date': ['01-19-2018'], 'title': ['Alpha']}
g.V().has("TestDate2", "date", gt("06-16-2018")).valueMap()
{'date': ['07-17-2018'], 'title': ['Hotel']}
{'date': ['08-18-2018'], 'title': ['India']}

g.V().has("TestDate2", "date", gte("06-16-2018")).valueMap()
{'date': ['07-17-2018'], 'title': ['Hotel']}
{'date': ['06-16-2018'], 'title': ['Foxtrot']}
{'date': ['08-18-2018'], 'title': ['India']}
大于

g.V().has("TestDate2", "date", lt("03-03-2018")).valueMap()
{'date': ['02-20-2018'], 'title': ['Bravo']}
{'date': ['01-19-2018'], 'title': ['Alpha']}

g.V().has("TestDate2", "date", lt("03-24-2018")).valueMap()
{'date': ['03-13-2018'], 'title': ['Charlie']}
{'date': ['02-20-2018'], 'title': ['Bravo']}
{'date': ['01-19-2018'], 'title': ['Alpha']}
g.V().has("TestDate2", "date", gt("06-16-2018")).valueMap()
{'date': ['07-17-2018'], 'title': ['Hotel']}
{'date': ['08-18-2018'], 'title': ['India']}

g.V().has("TestDate2", "date", gte("06-16-2018")).valueMap()
{'date': ['07-17-2018'], 'title': ['Hotel']}
{'date': ['06-16-2018'], 'title': ['Foxtrot']}
{'date': ['08-18-2018'], 'title': ['India']}
过滤器之间

g.V().has("TestDate2", "date", between("04-01-2018", "07-01-2018")).valueMap()
{'date': ['06-16-2018'], 'title': ['Foxtrot']}
{'date': ['04-14-2018'], 'title': ['Delta']}
{'date': ['05-15-2018'], 'title': ['Echo']}
失败了,但很好

g.V().has("TestDate2", "date", lt("3-3-2018")).valueMap()
{'date': ['03-13-2018'], 'title': ['Charlie']}
{'date': ['07-17-2018'], 'title': ['Hotel']}
{'date': ['02-20-2018'], 'title': ['Bravo']}
{'date': ['06-16-2018'], 'title': ['Foxtrot']}
{'date': ['04-14-2018'], 'title': ['Delta']}
{'date': ['08-18-2018'], 'title': ['India']}
{'date': ['01-19-2018'], 'title': ['Alpha']}
{'date': ['05-15-2018'], 'title': ['Echo']}

如果您是以Python(或任何其他语言)的字符串形式提交Gremlin查询,Amazon Neptune有一个用于指定日期的自定义语法。您可以使用函数
datetime()
将日期指定为ISO8061格式的字符串。此语法将字符串标识为日期对象,并相应地对其进行处理。因此,您不必依靠字典字符串比较来比较日期。这是有案可查的

例如,您可以将查询编写为字符串,如下所示:

// Insert Date as property
String insertQuery = "g.addV('TestDate2').property('title','Alpha').property('date', datetime('2018-01-19T00:00:00'))";

// Query for the date added above
String query = "g.V().hasLabel('TestDate2').has('date',gte(datetime('1929-01-01T00:00:00'))).valueMap()";

话虽如此,正如其他人所提到的,您也可以使用GLV客户端(使用Gremlin字节码而不是字符串提交查询)并使用客户端语言的本机日期实现本身。

您不能简单地将日期存储为
Date
对象吗?并且通常将作为
长的
存储在dabase中,因此易于使用且存储效率高。很抱歉,我没有遵循,如何将它们存储为日期?我使用python将字符串查询提交给Gremlin python,它应该可以使用Thank,但我将查询提交给
client.submit(query)
作为字符串,因此我不能将对象放入字符串中。我认为最简单的方法可能是将日期存储为13或10位整数(取决于您需要的精度)。这应该允许所有您想要进行的比较,并且在很大程度上独立于您需要如何查询图形。