簡體   English   中英

gremlin查找所有連接的頂點

[英]gremlin find all connected vertices

我有一個圖,其中a-> b,b-> c,c-> d等。 每個頂點都有一個createdOn屬性。 我想從a開始並獲取其createdOn屬性小於特定日期(例如5/31/2017)的所有頂點。 我嘗試使用重復,直到但沒有得到我期望的結果。 gV('a').repeat(outE().inV()).until(has('changedOn',gt('5/31/2017 12:00:00 AM')))我對此gV('a').repeat(outE().inV()).until(has('changedOn',gt('5/31/2017 12:00:00 AM')))因此,任何指導表示贊賞。

當詢問有關Gremlin的問題時,總是最好提供一個示例圖作為Gremlin腳本,可以將其粘貼到Gremlin Console中,如下所示:

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格式-您可能希望做同樣的事情,或者只是將日期存儲為很長的時間。 兩者都可用於“小於”和“大於”目的,並且可移植到我所知道的所有圖形數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM