如何在Gremlin查询中对顶点进行内部联接?

问题描述

我的架构如下: 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'))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...