如何使用 Gremlin 查询获取格式正确的树层次结构 Json

How to get a properly formatted Tree hierarchy Json using Gremlin query

我正在尝试从 AWS Neptune DB 检索树层次结构。我正在使用以下查询以 JSON 格式

检索数据
g.V().hasLabel(labelid.toLowerCase()).has("name", "Val oswalt").repeat(__.inE().outV()).emit()
                    .tree().by(__.valueMap("name")).toList();

此return我的数据格式如下json。

[
  {
    "{name=[Val oswalt]}": {
      "{}": {
        "{name=[Stan Polomoski]}": {
          "{}": {
            "{name=[MC Regan]}": {}
          }
        }
      }
    }
  }
]

是否有可能 return 数据采用适当的 json 格式或 Flare json 格式,如下所示

{
  "name": "Val oswalt",
  "children": [
    {
      "name": "Stan Polomoski",
      "children": [
        {
          "name": "MC Regan"
        }
      ]
    }
  ]
}

很难使用 Gremlin 将 tree() 结果转换为它提供的基本结构以外的任何东西,因为 post 使用 Gremlin 处理返回的 Tree 以递归转换 parent/child 对到新的 key/value 对将向您的查询添加大量不可读的代码。

返回的结果看起来像 MapString 表示有点奇怪,而您通过执行 valueMap('name') 得到的结果。除非您从不支持 Map 值作为键的编程语言中使用 Gremlin,否则我希望您能在那里获得一个您可以使用的实际 Map 对象。

综上所述,根据您针对输出的目标,看起来您可以通过执行以下操作来更接近该形式(不会使您的 Gremlin 过于复杂):

g.V().hasLabel(labelid.toLowerCase()).
      has("name", "Val oswalt").
  repeat(__.in()).emit().
  tree().
    by("name")

应该会产生如下内容:

{
  "Val oswalt": [
    {
      "Stan Polomoski": [
        {
          "MC Regan": []
        }
      ]
    }
  ]
}

虽然输出不完全相同,但绝对更清晰并且暗示了相同的结构。如果您只是需要具有您所请求的结构,我强烈建议您通过使用我建议的修改后的查询来保持 Gremlin 简单,然后 post-process 您的应用程序中的结果以获得该结构。 Gremlin 几乎可以做任何事情,但即使出于学术目的,我认为编写该查询也不值得。