【问题标题】:How to get multiple vertices/edges in a single gremlin query?如何在单个 gremlin 查询中获取多个顶点/边?
【发布时间】:2015-04-19 10:14:18
【问题描述】:

我处于需要使用单个查询获取两种不同类型的顶点的情况。例如,假设图具有以下结构:

Node("User")--Edge("is_member")-->Node("Membership")--Edge("is_member")-->Node("Group")

假设节点具有以下属性:

  1. 会员
    • 状态
    • 日期
    • 姓名
    • 日期
    • 类型

现在,我需要获取用户is_member 的所有Membership 节点,以及对应的Groupname。如何为此编写 Gremlin 查询?

我正在使用灯泡框架。如何将结果存储在 python 对象中?

【问题讨论】:

  • 您确定需要一个“会员”节点吗? ……对我来说,这听起来像是一种边缘。您还可以在边上设置属性。
  • @Faber 我觉得将membership 添加为节点可以帮助我以后建立有趣的关系,例如,喜欢用户是组成员的事实,对其发表评论等。

标签: titan gremlin bulbs


【解决方案1】:

以下查询为用户 u1 提供了一个带有 key = Membership-Nodes 和 value = list of group names of the key membership node 的地图:

m=[:];u1.out('is_member').groupBy(m){it}{it.out('is_member').name}

输出是:

gremlin> m
==>v[m1]=[group1]
==>v[m2]=[group2, group3]

这里使用的示例图:

g = new TinkerGraph()
u1 = g.addVertex('u1')
u2 = g.addVertex('u2')
m1 = g.addVertex('m1')
m2 = g.addVertex('m2')
g1 = g.addVertex('g1')
g2 = g.addVertex('g2')
g3 = g.addVertex('g3')

g.addEdge(u1, m1, 'is_member')
g.addEdge(u1, m2, 'is_member')
g.addEdge(u2, m2, 'is_member')
g.addEdge(m1, g1, 'is_member')
g.addEdge(m2, g2, 'is_member')
g.addEdge(m2, g3, 'is_member')

g1.name = 'group1'
g2.name = 'group2'
g3.name = 'group3'

另请参阅:How do I write a sub-query?

(用 gremlin2 测试)

【讨论】:

  • 所以,我假设在 Python 中使用 Bulbs 的返回值是字典的生成器,对吧?
  • 可能类似于键值对的生成器? ……对不起,我从来没有用过电灯泡。 bulbflow.com/docs/api/bulbs/gremlin
猜你喜欢
  • 2015-07-06
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多