在 gremlin orientDb 中合并顶点列表

Merge vertex list in gremlin orientDb

我是图形数据库领域的新手,我查询了树的叶子,还有一个 ID 列表。我想合并两个叶子列表并在一个新列表中删除重复项以对每个叶子求和 属性。我无法合并前 2 组顶点

g.V().hasLabel('Group').has('GroupId','G001').repeat(
    outE().inV()
).emit().hasLabel('User').as('UsersList1')

.V().has('UserId', within('001','002')).as('UsersList2')

.select('UsersList1','UsersList2').dedup().values('petitions').sum().unfold()

此致

我没有测试过,但我认为以下内容可以:

g.V().union(
    hasLabel('Group').has('GroupId','G001').repeat(
        outE().inV()
    ).until(hasLabel('User')),
    has('UserId', within('001','002')))
.dedup().values('petitions').sum()

为了只得到树叶,最好使用until。使用 emit 也将输出所有内部树节点。 union合并两个内部遍历。

您的查询有几处错误:

  • 您为遍历第一部分找到的每个用户调用 V().has('UserId', within('001','002'))
  • 遍历可以发出的不仅仅是叶子
  • select('UsersList1','UsersList2') 创建用户对
  • values('petitions') 尝试访问每对的 属性 petitions,这总是会失败

正确的做法是:

g.V().has('User', 'UserId', within('001','002')).fold().
  union(unfold(),
        V().has('Group','GroupId','G001').
            repeat(out()).until(hasLabel('User'))).
  dedup().
  values('petitions').sum()