在 Gremlin 中合并地图
Merging maps in Gremlin
我正在尝试编写一个查询来满足响应对象中的两个要求:
必须包含顶点的 所有 属性,而无需在查询中指定各个字段。
必须在对象的同一级别展平结果。
作为单独的查询,我可以这样做:
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"
}
]
}
这种联合方法依赖于我在末尾放置一个折叠,这反过来又不能正确地 merge/flatten 两个地图。预期的响应是:
{
"property1": "value1",
"property2": "value2",
"projectedProperty": "value"
}
是否有更好的方法来完成响应对象中 merging/flattening 两个映射的任务?
典型的 pattern 是 unfold()
您的映射到条目 (keys/values),然后 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]
我正在尝试编写一个查询来满足响应对象中的两个要求:
必须包含顶点的 所有 属性,而无需在查询中指定各个字段。
必须在对象的同一级别展平结果。
作为单独的查询,我可以这样做:
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"
}
]
}
这种联合方法依赖于我在末尾放置一个折叠,这反过来又不能正确地 merge/flatten 两个地图。预期的响应是:
{
"property1": "value1",
"property2": "value2",
"projectedProperty": "value"
}
是否有更好的方法来完成响应对象中 merging/flattening 两个映射的任务?
典型的 pattern 是 unfold()
您的映射到条目 (keys/values),然后 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]