Azure cosmosdb Azure Cosmos图在顶点属性中嵌套边顶点

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

我有两个顶点:

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)
.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上不可用。非常感谢。