在 gremlin 查询中选择多个边和顶点

Posted

技术标签:

【中文标题】在 gremlin 查询中选择多个边和顶点【英文标题】:Select multiple edges and vertexes in a gremlin query 【发布时间】:2021-12-07 14:13:40 【问题描述】:

我正在创建一个具有多个边的顶点,但需要一些帮助来编写查询以检索数据。

创作查询

g.addV("referral")
                            .as("r")
                            .property("createdAt", Date.now())
                            .addE("prospect")
                            .from_("r")
                            .to(__.V(user.id))
                            .addE("opportunity")
                            .from_("r")
                            .to(__.V(second_user.id))
                            .addE("referredBy")
                            .from_("r")
                            .to(__.V(business.id))
                            .select("r")
                            .next()

我想运行一个从第一个和第二个用户那里获取数据的查询。到目前为止我有

g.V(business.id) //business
            .in_("opportunity")
            .as("referral")
            .outV("referredBy")
            .as("referrer")
            .inV("prospect")
            .as("prospect")
            .select("referral", "referrer", "prospect")
            .toList()
            .next()

运行此查询时出现错误。我基本上想要一个可以迭代的对象中的引用、引用和潜在客户的数组。此外,任何有助于使我的初始查询更好的帮助都会有所帮助。

如果这有意义或您需要任何其他信息,请告诉我。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

错误是因为您使用的是outV,而您应该使用out。您只需要在outEinE 之后使用inVoutV。所以你的查询应该是

g.V(business.id) //business
 .in("opportunity")
 .as("referral")
 .out("referredBy")
 .as("referrer")
 .in("prospect")
 .as("prospect")
 .select("referral", "referrer", "prospect")
 .toList()

您也不需要next,因为您已经拥有toList

最后,与其使用asselect,不如使用path 步骤。

g.V(business.id) //business
 .in("opportunity")
 .out("referredBy")
 .in("prospect")
 .path()
 .toList()

【讨论】:

所以这并不是我想要的。我很确定在“referredBy”步骤之后我需要在做前景之前退一步。 “参考”顶点有 3 条边都指向。它是该模型中的中心顶点。如果我执行“out('referredBy')”,我相信这会将我带到用户顶点,但“in('prospect')”需要从“referral”顶点进入,而不是“user”顶点。我想我需要一种方法来保存我到目前为止所拥有的东西,然后返回到参考顶点,然后进入获得前景。让我知道这是否有意义,并感谢迄今为止的帮助。 如果您可以编辑问题以仅包含一些 addVaddE 步骤来创建示例图(因为我不知道 business.id 指的是什么等等,并显示一个示例您需要的确切输出将有助于构建经过测试的解决方案。 在这篇文章***.com/questions/51388315/…中有一个小样本图的例子@ 我能弄明白。了解如何使用路径帮助我得到了我想要的东西。基本上做了.in("opportunity").out("referredBy").in("referredBy").out("prospect").path().unfold().dedup()。我从参考顶点出发,然后返回该顶点以获取我想要的另一条边并进行重复数据删除以将副本从路径中取出。感谢您的帮助

以上是关于在 gremlin 查询中选择多个边和顶点的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个 gremlin 查询中将两个顶点详细信息和边属性详细信息合并在一起

如何从顶点scala gremlin获取所有传入/传出边的所有顶点

如果顶点是在 scala gremline 中使用复合键创建的,如何使用 vertexId 进行查询

Gremlin删除所有顶点

Gremlin 中的决策树查询

使用Gremlin在图中查找最长的循环路径