Azure cosmosdb 如何在TinkerPop3中的select上组合节点?

Azure cosmosdb 如何在TinkerPop3中的select上组合节点?,azure-cosmosdb,gremlin,tinkerpop3,Azure Cosmosdb,Gremlin,Tinkerpop3,我正在使用ApacheGremlinGraph和TinkerPop3。 有两个节点 <!-- # parentNode with properties # --> g.addV('Location') .property('id', 'fb864e1f-a2e0-4c02-b891-2c0713b29751') .property('name', 'BananaShop') .property('description', 'Ipsum dolor sit ...') .proper

我正在使用ApacheGremlinGraph和TinkerPop3。 有两个节点

<!-- # parentNode with properties # -->
g.addV('Location')
.property('id', 'fb864e1f-a2e0-4c02-b891-2c0713b29751')
.property('name', 'BananaShop')
.property('description', 'Ipsum dolor sit ...')
.property('fuu', 'abc')
.property('bar', 'xyz')
.addE('FR-FR').to(g.V('b3bd8a03-531f-4f7f-b355-32954b03fd21')) 
结果很好。我有两个节点,所有属性! 但是我只对一个具有父节点的属性和子节点的转换的单一结果感兴趣。如果没有与翻译匹配的子级,则选择父级的名称和描述

{
 id : ...,
 name : "FR-FR",         // childnode data
 description : "FR-FR",  // childnode data
 fuu : "...",
 bar : "..."
}
我需要如何更改对此的查询?

在这种情况下,我将使用project:

gremlin> g.V().has('name','BananaShop').
......1>   project('id','name','description','fuu','bar').
......2>     by('id').
......3>     by(out('FR-FR').values('name')).
......4>     by(out('FR-FR').values('description')).
......5>     by('fuu').
......6>     by('bar')
==>[id:fb864e1f-a2e0-4c02-b891-2c0713b29751,name:FR.BananaShop,description:Et ea rebum ...,fuu:abc,bar:xyz]
但这样做会使您两次穿越。如果在COSMODB中价格昂贵,您可以考虑将格式更改为更类似:

gremlin> g.V().has('name','BananaShop').
......1>   project('id','child','fuu','bar').
......2>     by('id').
......3>     by(out('FR-FR').project('name','description').by('name').by('description')).
......4>     by('fuu').
......5>     by('bar')
==>[id:fb864e1f-a2e0-4c02-b891-2c0713b29751,child:[name:FR.BananaShop,description:Et ea rebum ...],fuu:abc,bar:xyz]

如果要获取原始特性值被本地化特性(如果存在)覆盖的valueMap:

g.V().has('name','BananaShop').as('b').
  coalesce(out('FR-FR'), identity()).valueMap().as('l').
  select('b').properties().as('p').
  group().
    by(key()).
    by(coalesce(select('l').select(select('p').key()).unfold(), value()).fold())
例子 现有翻译 不存在的翻译
欢迎来到Stackoverflow。请编辑您的问题以澄清您的问题描述。这可能会引起更多的兴趣。有关指导,请查看第页和第页
gremlin> g.V().has('name','BananaShop').
......1>   project('id','child','fuu','bar').
......2>     by('id').
......3>     by(out('FR-FR').project('name','description').by('name').by('description')).
......4>     by('fuu').
......5>     by('bar')
==>[id:fb864e1f-a2e0-4c02-b891-2c0713b29751,child:[name:FR.BananaShop,description:Et ea rebum ...],fuu:abc,bar:xyz]
g.V().has('name','BananaShop').as('b').
  coalesce(out('FR-FR'), identity()).valueMap().as('l').
  select('b').properties().as('p').
  group().
    by(key()).
    by(coalesce(select('l').select(select('p').key()).unfold(), value()).fold())
gremlin> g.V().has('name','BananaShop').as('b').
......1>   coalesce(out('FR-FR'), identity()).valueMap().as('l').
......2>   select('b').properties().as('p').
......3>   group().
......4>     by(key()).
......5>     by(coalesce(select('l').select(select('p').key()).unfold(), value()).fold()).
......6>   unfold()
==>bar=[xyz]
==>fuu=[abc]
==>name=[FR.BananaShop]
==>description=[Et ea rebum ...]
==>id=[b3bd8a03-531f-4f7f-b355-32954b03fd21]
gremlin> g.V().has('name','BananaShop').as('b').
......1>   coalesce(out('DE-DE'), identity()).valueMap().as('l').
......2>   select('b').properties().as('p').
......3>   group().
......4>     by(key()).
......5>     by(coalesce(select('l').select(select('p').key()).unfold(), value()).fold()).
......6>   unfold()
==>bar=[xyz]
==>fuu=[abc]
==>name=[BananaShop]
==>description=[Ipsum dolor sit ...]
==>id=[fb864e1f-a2e0-4c02-b891-2c0713b29751]