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]