我有一个图表,其中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')))
我是新手,所以任何指导都表示赞赏。
答案 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]]
有几点需要注意:
emit()
的定位发生在repeat()
之前,因为您要发出“a”顶点 - 如果它位于repeat()
之后,您将不会获得该顶点until()
,但这只是控制循环停止的时间。在我的示例中,它会一直运行,直到链中没有顶点 - 您可能需要until()
步骤,具体取决于您的情况。