首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TinkerPop3中结合select节点?

如何在TinkerPop3中结合select节点?
EN

Stack Overflow用户
提问于 2018-09-10 13:42:07
回答 2查看 30关注 0票数 0

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

代码语言:javascript
复制
<!-- # 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')) 

而且还

代码语言:javascript
复制
<!-- # childNode with translations only # -->
g.addV('Localized')
.property('id', 'b3bd8a03-531f-4f7f-b355-32954b03fd21')
.property('name', 'FR.BananaShop')
.property('description', 'Et ea rebum ...')

我的问题是:

代码语言:javascript
复制
g.V().has("Name","BananaShop").as("a").out("FR-FR").as("b").select("a","b")   

结果很好。我有两个节点,所有的属性!但是我只对带有父节点的属性和子节点的转换的singel结果感兴趣。如果没有与翻译匹配的子版本,则选择父版本的“名称”和“描述”。

代码语言:javascript
复制
{
 id : ...,
 name : "FR-FR",         // childnode data
 description : "FR-FR",  // childnode data
 fuu : "...",
 bar : "..."
}

如何更改对此的查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-10 15:10:45

在这种情况下,我会使用project()

代码语言:javascript
复制
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]

通过这样做,您将遍历out()两次。如果这在CosmosDB中很昂贵,您可以考虑将您的格式更改为更类似的内容:

代码语言:javascript
复制
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]
票数 1
EN

Stack Overflow用户

发布于 2018-09-12 15:17:27

如果您想获得一个原始属性值由本地化属性覆盖的valueMap (如果它们存在的话):

代码语言:javascript
复制
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())

示例

现有翻译

代码语言:javascript
复制
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]

不存在的翻译

代码语言:javascript
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52259132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档