问题描述
我的架构如下: B,C,D,E的“购买”; 一个“知道的” F; F从B,G,H处“购买”。
如何仅从Gremlin的A(买方)那里获得B(买方知道的任何人共享的共同卖方)?
解决方法
在询问有关Gremlin的问题时,最好以脚本的形式包含一些示例数据,如下所示:
g.addV().property(id,'A').as('a').
addV().property(id,'B').as('b').
addV().property(id,'C').as('c').
addV().property(id,'D').as('d').
addV().property(id,'E').as('e').
addV().property(id,'F').as('f').
addV().property(id,'G').as('g').
addV().property(id,'H').as('h').
addE('buysFrom').from('a').to('b').
addE('buysFrom').from('a').to('c').
addE('buysFrom').from('a').to('d').
addE('buysFrom').from('a').to('e').
addE('knows').from('a').to('f').
addE('buysFrom').from('f').to('b').
addE('buysFrom').from('f').to('g').
addE('buysFrom').from('f').to('h').iterate()
我想您可以通过几种方法来实现,但是以下是我立即想到的方法:
gremlin> g.V('A').as('a').out('buysFrom').
......1> where(__.in('buysFrom').both('knows').as('a'))
==>v[B]
第一行找到“ A”,然后找到他们从谁那里购买。第二行过滤掉那些通过从“ buysFrom”边缘返回的人来购买的“ A”人,从而找到认识“ A”的人。
上面的代码是Groovy语法,但是我看到您被标记为“ gremlinpython”,因此只需要进行一些小的调整即可在Python中工作:
g.V('A').as_('a').out('buysFrom').
where(__.in_('buysFrom').both('knows').as_('a'))