繁体   English   中英

Gremlin NodeJS 查询返回的结果与 Groovy 不同

[英]Gremlin NodeJS query returns different results than Groovy

我有一个最初在控制台中编写的查询:

    g.V().hasLabel('group')
      .has('type', 'PowerUsers')
      .local(__.union(
         __.project('group').by(__.valueMap().by(__.unfold())),
         __.inE().outV().project('user').by(__.valueMap().by(__.unfold())))
      .fold()).unfold().toList()

我得到类似的东西:

==>{group={owner=A, group_id=21651399-91fd-4da4-8608-1bd30447e773, name=Group 8, type=PowerUsers}}
==>{user={name=John, user_id=91f5e306-77f1-4aa1-b9d0-23136f57142d}}
==>{user={name=Jane, user_id=7f133d0d-47f3-479d-b6e7-5191bea52459}}
==>{group={owner=A, group_id=ef8c81f7-7066-49b2-9a03-bad731676a8c, name=Group B, type=PowerUsers}}
==>{user={name=Max, user_id=acf6abb8-08b3-4fc6-a4cb-f34ff523d628}}
==>{group={owner=A, group_id=07dff798-d6db-4765-8d74-0c7be66bec05, name=Group C, type=PowerUsers}}
==>{user={name=John, user_id=91f5e306-77f1-4aa1-b9d0-23136f57142d}}
==>{user={name=Max, user_id=acf6abb8-08b3-4fc6-a4cb-f34ff523d628}}

当我使用 NodeJS 运行该查询时,我期望得到类似的结果,但我没有。 我得到这样的东西:

[ { group:
     { owner: 'A',
       group_id: '21651399-91fd-4da4-8608-1bd30447e773',
       name: 'Group 8',
       type: 'PowerUsers' } },
  { user:
     { name: 'John',
       user_id: '91f5e306-77f1-4aa1-b9d0-23136f57142d'} },
  { user:
     { name: 'John',
       user_id: '91f5e306-77f1-4aa1-b9d0-23136f57142d'} },
  { user:
     { name: 'Jane',
       user_id: '7f133d0d-47f3-479d-b6e7-5191bea52459'} },
  { user:
     { name: 'Jane',
       user_id: '7f133d0d-47f3-479d-b6e7-5191bea52459'} },
  { group:
     { owner: 'A',
       group_id: 'ef8c81f7-7066-49b2-9a03-bad731676a8c',
       name: 'Group B',
       type: 'PowerUsers' } },
  { user:
     { name: 'Max',
       user_id: 'acf6abb8-08b3-4fc6-a4cb-f34ff523d628' } },
  ...

因为我在不同的组中有相同的用户,所以我不能使用 dedup(),如果 NodeJS 中的结果与 Groovy 相同,那就完美了。 不幸的是,他们不是,我不明白为什么NodeJS中的结果都搞砸了,考虑到查询完全相同

我觉得您可以使用嵌套的project()来让您的组与您的用户保持联系:

g.V().hasLabel('group')
     .has('type', 'PowerUsers')
     .project('group', 'users')
        .by(__.valueMap().by(__.unfold()))
        .by(__.in().project('user').by(__.valueMap().by(__.unfold()).fold()))

通过这种方式,您不必担心订购任何东西。 我认为使用“组”作为Map的键可能更像 Gremlin 式,其值为用户列表:

g.V().hasLabel('group')
     .has('type', 'PowerUsers')
     .group()
        .by(__.valueMap().by(__.unfold()))
        .by(__.in().project('user').by(__.valueMap().by(__.unfold()).fold()))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM