【问题标题】:Query to find node which has only one vertex in common查询以查找只有一个公共顶点的节点
【发布时间】:2021-06-27 17:15:38
【问题描述】:

我有以下顶点 -

  Person1 -> Device1 <- Person2 
                  ^
     |            |
     v            
    Email1  <-  Person3

现在我想编写一个 gremlin 查询(janusgraph),它将为我提供所有连接到 person1 所连接设备的人(仅)。 所以根据上图,我们的输出应该是-[Person2]。 Person3 不在输出中,因为 Person3 还与“Person1”的“Email1”连接。

【问题讨论】:

标签: graph gremlin graph-databases janusgraph tinkerpop3


【解决方案1】:
g.addV('person').property('name', 'Person1').as('p1'). 
  addV('person').property('name', 'Person2').as('p2').
  addV('person').property('name', 'Person3').as('p3').
  addV('device').as('d1').
  addV('email').as('e1').
  addE('HAS_DEVICE').from('p1').to('d1').
  addE('HAS_EMAIL').from('p1').to('e1').
  addE('HAS_DEVICE').from('p2').to('d1').
  addE('HAS_DEVICE').from('p3').to('d1').
  addE('HAS_EMAIL').from('p3').to('e1')

以下遍历将为您提供通过一个或多个“设备”顶点连接到“Person1”而不通过任何其他类型顶点连接的人员顶点。在此处输入代码

g.V().has('person', 'name', 'Person1').as('p1').
  out().as('connector').
  in().where(neq('p1')).
  group().
    by().
    by(select('connector').label().fold()).
  unfold().
  where(
    select(values).
    unfold().dedup().fold().  // just in case the persons are connected by multiple devices
    is(eq(['device']))
  ).
  select(keys)

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多