Gremlin 查询根据页面大小返回不同的结构:数组与单个映射

问题描述 投票:0回答:1

我正在使用 Gremlin 查询,并遇到基于指定页面大小的意外行为。当我将页面大小设置为大于 1 时,查询会按预期返回 groups 键下的组映射数组:

{
  "count": 2,
  "groups": [
    {
      "admin_team_ids": ["xxx"],
      "created_at": "2024-02-28T23:19:01Z",
      ...
    },
    {
      "admin_team_ids": ["xxx"],
      "created_at": "2024-02-28T23:19:01Z",
      ...
    }
  ]
}

但是,当我将页面大小更改为 1 时,结构发生了变化,并且 groups 键后面是单个映射而不是数组:

{
  "count": 2,
  "groups": {
    "admin_team_ids": ["xxx"],
    "created_at": "2024-02-28T23:16:37Z",
    ...
  }
}

我不确定 Gremlin 查询的哪一部分导致了此行为。这是查询的片段(pageSize=1;要将其更改为大于 1,只需更新下面片段中的“1”):

g.V('fcc6f904-d849-8293-f5c4-5c121e8e37df').
  outE('test-edge').inV().hasLabel('group').
  order().by('name', asc).
  valueMap().with(WithOptions.tokens).
  fold().as('groups', 'count').select('groups', 'count').by(range(local, 0, 1)).by(count(local))

(我正在尝试获取特定顶点的直接传出顶点,并带有分页)

这是 Gremlin 查询的已知行为,还是与结果的处理方式有关?如何确保 groups 键始终返回一个数组,无论页面大小如何?

这在技术上并没有阻碍我们,因为我们可以在页面大小为1时进行一些特殊的条件检查,但只是想知道处理这种情况的最佳方法。预先感谢您的任何见解!

gremlin amazon-neptune gremlin-server
1个回答
0
投票

考虑到如果有多个值,Gremlin 将创建一个列表结果,但如果只有一个值,则仅返回该值,处理此问题的最简单方法可能是使用类似

unfold().fold()
的内容结束查询。如果只有一个结果,
unfold
将不执行任何操作,但如果有多个结果,则将删除列表。然后,
fold
将保证所有结果都返回到列表中。

这是一个简单的例子来说明它是如何工作的

gremlin> g.V()
==>v[0]
==>v[1]

gremlin> g.V().fold().limit(local,1)
==>v[0]

gremlin> g.V().fold().limit(local,2)
==>[v[0],v[1]]

gremlin> g.V().fold().limit(local,1).unfold().fold()
==>[v[0]]

gremlin> g.V().fold().limit(local,2).unfold().fold()
==>[v[0],v[1]]
© www.soinside.com 2019 - 2024. All rights reserved.