【问题标题】:Include a specific edge from a parent vertex in traversal在遍历中包含来自父顶点的特定边
【发布时间】:2020-05-08 06:59:02
【问题描述】:

上图是 Azure Cosmos DB 中我的图形数据库的表示。

我需要获取addressesproducts,这些product propertiesdetail vertices 链接到来自address vertex 的产品以及produces edge 的属性。

这是我提出的查询,但它不包括产品中produces edge 的属性。

g.V()
.hasLabel('address')
.project('address', 'products')
.by(valueMap(true))
.by(
    __.as('a')
    .outE('produces')
    .as('details1')
    .select('a')
    .out()
    .hasLabel('detail')
    .as('d')
    .out()
    .hasLabel('product')
    .group()
    .by(valueMap(true))
    .by(select('d').dedup().valueMap(true).fold())
    .unfold()
    .project('product', 'custom_details', 'details')
    .by(select(keys))
    .by(select(values))
    .by(select('details1').valueMap(true).fold())
    .fold()
)

播种图:

g
.addV('address')
.property('name', 'address1')
.property('id', 'address1')
.property('pk', 'address1')
.as('address1')

.addV('address')
.property('name', 'address2')
.property('id', 'address2')
.property('pk', 'address2')
.as('address2')

.addV('detail')
.property('name', 'detail1')
.property('id', 'detail1')
.property('pk', 'detail1')
.as('detail1')

.addV('detail')
.property('name', 'detail2')
.property('id', 'detail2')
.property('pk', 'detail2')
.as('detail2')

.addV('detail')
.property('name', 'detail3')
.property('id', 'detail3')
.property('pk', 'detail3')
.as('detail3')

.addV('detail')
.property('name', 'detail4')
.property('id', 'detail4')
.property('pk', 'detail4')
.as('detail4')

.addV('product')
.property('name', 'product1')
.property('id', 'product1')
.property('pk', 'product1')
.as('product1')

.addV('product')
.property('name', 'product2')
.property('id', 'product2')
.property('pk', 'product2')
.as('product2')

.addE('produces')
.from('address1')
.to('product1')

.addE('produces')
.from('address2')
.to('product1')

.addE('produces')
.from('address2')
.to('product2')

.addE('product_detail')
.from('address1')
.to('detail1')

.addE('product_detail')
.from('detail1')
.to('product1')

.addE('product_detail')
.from('address1')
.to('detail2')

.addE('product_detail')
.from('detail2')
.to('product1')

.addE('product_detail')
.from('address2')
.to('detail3')

.addE('product_detail')
.from('detail3')
.to('product1')

.addE('product_detail')
.from('address2')
.to('detail4')

.addE('product_detail')
.from('detail4')
.to('product2')

【问题讨论】:

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


    【解决方案1】:

    如果我从您的查询中理解了所需的结果,我认为您正在寻找类似的东西:

    g.V().hasLabel('address').
      project('address', 'products').
        by(valueMap(true)).
        by(__.as('a').
          outE('produces').
          project('product', 'custom_details', 'details').
            by(inV().valueMap(true)).
            by(inV().in('product_detail').
                where(__.in('product_detail').as('a')).
                valueMap(true).fold()).
            by(valueMap(true)).fold())
    

    示例:https://gremlify.com/8s

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多