格雷姆林 查找所有连接的顶点



我有一个图表,其中 a -> b、b -> c、c -> d 等等。每个顶点都有一个 createdOn 属性。我想从 a 开始并获取其 createdOn 属性小于特定日期的所有顶点,例如 5/31/2017。我尝试使用重复和直到,但没有得到我期望的结果。g.V('a').repeat(outE().inV()).until(has('changedOn',gt('5/31/2017 12:00:00 AM')))我是新手,所以任何指导都值得赞赏。

在询问有关 Gremlin 的问题时,最好提供一个示例图形作为 Gremlin 脚本,可以粘贴到 Gremlin 控制台中,如下所示:

g.addV('person').property('name','a').property('changedOn', '2018-01-15T11:53:00').as('a').
addV('person').property('name','b').property('changedOn', '2018-01-15T12:53:00').as('b').
addV('person').property('name','c').property('changedOn', '2018-01-15T13:53:00').as('c').
addV('person').property('name','d').property('changedOn', '2018-01-15T14:53:00').as('d').
addV('person').property('name','e').property('changedOn', '2018-01-15T13:53:00').as('e').
addE('link').from('a').to('b').
addE('link').from('b').to('c').
addE('link').from('c').to('d').
addE('link').from('d').to('e').iterate()

给定该图,您可以使用emit()解决问题,该图解释了repeat()应继续执行该步骤的遍历器:

gremlin> g.V().has('person','name','a').
......1>   emit(has('changedOn',lt('2018-01-15T14:53:00'))).
......2>   repeat(out('link')).
......3>   valueMap()
==>[name:[a],changedOn:[2018-01-15T11:53:00]]
==>[name:[b],changedOn:[2018-01-15T12:53:00]]
==>[name:[c],changedOn:[2018-01-15T13:53:00]]
==>[name:[e],changedOn:[2018-01-15T13:53:00]]

需要注意的几点:

  1. 在这种情况下,emit()的定位发生在repeat()之前,因为您想发出"a"顶点 - 如果它位于repeat()之后,您将不会获得该顶点。
  2. 您尝试使用until()但这只控制循环何时停止。在我的示例中,它一直运行到链中没有更多顶点 - 根据您的情况,您可能需要一个until()步骤。
  3. 我不知道您在图表中存储的日期形式,但我使用了 ISO-8601 格式 - 您可能希望执行相同的操作或只是将日期存储为长。对于"小于"和"大于"的目的,两者都是可比的,并且可以移植到我所知道的所有图形数据库。

最新更新