Azure cosmosdb Azure Cosmos图在顶点属性中嵌套边顶点
我有两个顶点: 1) 顶点1:Azure cosmosdb Azure Cosmos图在顶点属性中嵌套边顶点,azure-cosmosdb,gremlin,azure-cosmosdb-gremlinapi,Azure Cosmosdb,Gremlin,Azure Cosmosdb Gremlinapi,我有两个顶点: 1) 顶点1:{id:1,名称:“john”} 2) 顶点2:{id:2,名称:“mary”} 有一条从1到2的边,名为“children” 可以像这样使用gremlin返回嵌套在1中的2吗 { id: 1, name: “john”, children: { id: 2, name: “mary” } } 谢谢大家! 通过@noam621的惊人帮助,我的解决方案--------------------------------- g.V(1
{id:1,名称:“john”}
2) 顶点2:{id:2,名称:“mary”}
有一条从1到2的边,名为“children”
可以像这样使用gremlin返回嵌套在1中的2吗
{
id: 1,
name: “john”,
children: { id: 2, name: “mary” }
}
谢谢大家!
通过@noam621的惊人帮助,我的解决方案---------------------------------
g.V(1)
.union( valueMap(true),
project('children').by( coalesce( out('children').valueMap(true).fold() , constant([]))),
project('parents').by( coalesce( out('parents').valueMap(true).fold() , constant([])))
)
.unfold().group().by(keys).by(select(values))
它返回以下对象:
{
id: 1,
name: [ “john” ],
children: [ { id: 2, name: [ “mary” ] } ],
parents: []
}
.union with project是将所有对象合并到一个对象中的关键。
valueMap(true).fold()是获取边中所有对象的基础,如果边不返回任何顶点,则合并有助于使用默认值
由于Azure Cosmos的某些限制,gremlin只能以数组值的形式获取值。
因此,我最终确定了应用程序代码中的对象格式。现在还可以
谢谢大家! 您可以对两个顶点使用
项目
步骤:
g.V(1).project('id', 'name', 'children').
by(id).
by('name').
by(out('children').
project('id', 'name').by(id).
by('name'))
例如:
使用
valueMap
进行查询:
g.V(1).union(
valueMap().
with(WithOptions.tokens).by(unfold()),
project('children').
by(out('children').
valueMap().
with(WithOptions.tokens).by(unfold()))
).unfold().
group().by(keys).
by(select(values))
如果
valueMap().with(WithOptions.tokens)
在Cosmos中不支持使用valueMap(true)
而不是则最好使用基于令牌的by()
调制器,因此更喜欢by(id)
和by(id())
和by(“名称”)
到by(值('name'))
-太好了!!!它工作得很好!:D关于这一点,还有一个问题,是否可以投影到所有属性,而不是指定每个属性?谢谢@MuriloMacielCurti您可以使用elementMap
或valueMap
,然后将其与project
合并,仅用于“children”字段。请看这里的合并地图:@noam621我将在这里进行测试,并返回结果。非常感谢你@noam621我不知道如何实现这一点。你能分享一个例子吗?我认为elementMap在Azure Cosmos Db上不可用。非常感谢。