【问题标题】:find all edges for a result set of nodes查找节点结果集的所有边
【发布时间】:2021-10-28 21:51:34
【问题描述】:

我有一个返回一组节点的查询,如下所示:

g.V().as("a","node").has("prop1", true).out().as("b","node").hasLabel("device")
.in().as("c","node").hasLabel("lbl1").has("prop1", false).select("a","b","c").limit(200)

现在我想返回所有这些节点以及它们之间的任何边缘作为我的结果。我尝试了以下方法,但它总是空空如也:

g.V().(....)
.select("a","b","c").limit(200)
.select("node").dedup().fold().as('all')
.unfold().as('start').bothE().as('edge').otherV().as('end')
.where(within('all'))
.select('start', 'edge', 'end').dedup()

不幸的是,这总是空的。我认为我的 where 过滤器不正确。如何仅筛选节点“c”是“a”中的节点之一的结果?

我想保持这个通用性,以便我可以使用它来处理多个不同的查询,这些查询都返回一组节点。

【问题讨论】:

    标签: gremlin tinkerpop janusgraph tinkerpop3


    【解决方案1】:

    对于这个查询,您应该检查 out 顶点是否在开始顶点的集合中。因此,您应该首先 fold() 开始集,然后在 where 中使用 within() 谓词对其进行检查 这里是查询例如g = TinkerFactory.createModern().traversal()

    g.V().limit(3).fold().as('all').
        unfold().as('a').outE().as('b').otherV().as('c').
        where(within('all')).
        select('a', 'b', 'c')
    

    在此处查看第二个示例:https://tinkerpop.apache.org/docs/current/reference/#where-step

    【讨论】:

    • 感谢帮助。我认为我最大的问题是我使用了select 而不是aggregate,这意味着我只收到了端节点的集合,因为select 替换了以前的商店。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多