【问题标题】:gremlin find all connected verticesgremlin 找到所有连接的顶点
【发布时间】:2018-04-23 18:37:38
【问题描述】:

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

【问题讨论】:

    标签: graph gremlin


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-15
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多