【问题标题】:Azure Cosmos Graph nest edge vertex in a vertex propertyAzure Cosmos Graph 在顶点属性中嵌套边顶点
【发布时间】:2020-04-04 22:54:25
【问题描述】:

我有两个顶点:

1) 顶点 1:{ id: 1, name: “john” }

2) 顶点 2:{ id: 2, name: “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 与 project 是将所有对象合并到一个对象中的关键。 valueMap(true).fold() 是获取边缘中所有对象的基础,如果边缘不返回任何顶点,则合并有助于使用默认值。

由于某些 Azure Cosmos gremlin 限制,只能将值作为数组值获取。 因此,我在我的应用程序代码中最终确定了对象格式。暂时没问题。

谢谢!

【问题讨论】:

    标签: azure-cosmosdb gremlin azure-cosmosdb-gremlinapi


    【解决方案1】:

    您可以对两个顶点使用project 步骤:

    g.V(1).project('id', 'name', 'children').
        by(id).
        by('name').
        by(out('children').
          project('id', 'name').by(id).
            by('name'))
    

    示例: https://gremlify.com/3j


    使用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))
    

    如果 Cosmos 不支持 valueMap().with(WithOptions.tokens),请改用 valueMap(true)

    【讨论】:

    • 最好选择基于令牌的by() 调制器,因此更喜欢by(id)by(id())by("name")by(values('name')) - tinkerpop.apache.org/docs/current/recipes/…
    • 太棒了!!!它工作得很好! :D 关于这一点还有一个问题,是否可以投影到所有属性而不是指定每个属性?谢谢!!
    • @MuriloMacielCurti 您可以使用elementMapvalueMap,然后将其与project 合并,仅用于“儿童”字段。在这里查看合并地图:stackoverflow.com/questions/60307292/merging-maps-in-gremlin
    • @noam621 我要在这里测试,我会返回结果。非常感谢!
    • @noam621 我不知道如何实现这一点。你能分享一个例子吗?我认为 elementMap 在 Azure Cosmos Db 上不可用。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    相关资源
    最近更新 更多