在Gremlin中合并地图



我正试图编写一个满足响应对象中两个要求的查询:

  1. 必须包含顶点的所有属性,而不在查询中指定单个字段。

  2. 必须将对象上相同级别的结果展平。

作为单独的查询,我可以做:

1.valueMap查询

g.V(1)
.valueMap().by(unfold()).fold()

响应:

{
"property1": "value1",
"property2": "value2"
}

2.project查询

g.V(1)
.project("projectedProperty")
.by(out("X").valueMap().by(unfold()).fold())

响应:

{
"projectedProperty": "value",
}

组合查询

我尝试使用并集来组合这些结果:

g.V(1)
.union(
valueMap().by(unfold()).fold(), // Query 1
project("projectedField").by(out("X").valueMap().by(unfold()).fold()) // Query 2
).fold()

响应:

{
[
{
"property1": "value1",
"property2": "value2"
},
{
"projectedProperty": "value"
}
]
}

这种联合方法依赖于我在最后加一个折叠,这反过来又不能正确地合并/压平两张地图。预期响应为:

{
"property1": "value1",
"property2": "value2",
"projectedProperty": "value"
}

有没有更好的方法来完成在响应对象中合并/压平两个映射的任务?

典型的模式是unfold()将映射映射到条目(键/值(,然后group()将它们重新组合为一个:

gremlin> g.V().has('person','name','marko').
......1>   union(project('count').by(outE().count()), elementMap()).
......2>   unfold().
......3>   group().by(keys).by(select(values))
==>[count:3,name:marko,label:person,id:1,age:29]

最新更新