gremlin找到所有连接的顶点

时间:2018-04-23 18:37:39

标签: graph gremlin

我有一个图表,其中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')))我是新手,所以任何指导都表示赞赏。

1 个答案:

答案 0 :(得分:2)

在询问有关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格式 - 您可能希望这样做或只是将日期存储为长。两者都可以用于“小于”和“大于”的目的,并且可以移植到我所知道的所有图形数据库中。