【问题标题】:AWS Neptune/Gremlin: merge edge exists query and insert edge query into one queryAWS Neptune/Gremlin:合并边缘存在查询并将边缘查询插入到一个查询中
【发布时间】:2022-01-20 20:51:45
【问题描述】:

我有以下查询要检查是否存在边缘:

g.V("N001").hasLabel("my-type").out("parent").hasId("N002").hasLabel("my-type").limit(1).hasNext()

我也有插入边缘不存在的后续查询:

g.V("N001").hasLabel("my-type").as("a").V("N002").hasLabel("my-type").as("b").addE("parent").from("a").to("b")

我的问题是如何将这两个查询合并为一个查询?

【问题讨论】:

    标签: amazon-web-services gremlin amazon-neptune


    【解决方案1】:

    在单个查询中实现此目的的常用方法是fold..coalesce..unfold 模式。对于您的查询,它将类似于:

    g.V("N001").hasLabel("my-type").
      out("parent").
      hasId("N002").hasLabel("my-type").
      fold().
      coalesce(unfold(), addE('parent').from('N001').to('N002'))
               
    

    注意 ID 值是唯一的,存在或不存在,如果您知道要查找的 ID,则不需要标签检查,除非您不确定您使用的 ID 是否属于该类型(标签) .

    查询将返回现有顶点或新创建的边。如果愿意,您当然可以编辑查询以返回现有边。

    【讨论】:

    • 如何将标签“my-type”添加回查询中?因为我在系统中有不同的标签。
    • 您可以按原来的方式添加它,我将编辑答案,但是如果您使用显式 ID,则标签检查在许多方面都是多余的,除非您不确定该 ID 是否是正确的类型(标签)
    • 如何添加回“addE('parent').from('N001').to('N002')”的标签类型..?
    • 我不确定我是否理解这个问题。你指的是哪个标签?该查询已经在coalesce 之前检查了两个标签
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2021-06-05
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多