【发布时间】:2020-11-21 00:13:36
【问题描述】:
我有一个最初在控制台中编写的查询:
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 中的结果都是一团糟,考虑到查询完全一样
【问题讨论】:
-
我认为您需要澄清这两个结果的不同之处。我看到 js 结果中缺少“Jane”,并且“John”被重复了几次,但我不确定我是否遵循了为什么你的控制台结果是“正确的”而 js 的结果是“错误的” .也许您应该包含一些示例数据作为演示预期输出的 gremlin 脚本。至于为什么结果完全不同,因为它们是相同的遍历可能只是与遍历器的非确定性排序有关。
-
我犯了一个错误,Jane x2 应该代替 john。我假设相同的查询应该在控制台和通过 Node.js 显示相同的结果。也许有一些特定的设置在 NodeJS 上有一些默认值,而控制台上没有设置?
-
如果你想要一个特定的顺序,你应该明确地使用 Gremlin 并使用
order()步骤来控制它。否则,您可能会得到不确定的结果(取决于后端)。因此,我无法真正说出您在这里真正想要什么,这就是为什么我要求提供更多背景信息。仅凭我的直觉,我认为结果的不同结构会更好,其中用户直接绑定到他们的组而不是依赖遍历顺序,但我不知道您的要求。 -
是的,这就是我的意思(解释得不好)。我需要的是组,然后是用户,如果有的话,就在它下面,这样我就可以知道哪些用户属于哪个组。根据我得到的结果,我无法知道 John 和 Jane 所在的组。控制台的结果正是我所需要的。现在我必须弄清楚如何订购它们,以便获得相同的列表。
标签: node.js gremlin amazon-neptune