如何使用 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 对将向您的查询添加大量不可读的代码。
返回的结果看起来像 Map
的 String
表示有点奇怪,而您通过执行 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 几乎可以做任何事情,但即使出于学术目的,我认为编写该查询也不值得。
我正在尝试从 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 对将向您的查询添加大量不可读的代码。
返回的结果看起来像 Map
的 String
表示有点奇怪,而您通过执行 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 几乎可以做任何事情,但即使出于学术目的,我认为编写该查询也不值得。