Gremlin连接多个顶点值

时间:2016-08-23 14:39:34

标签: graph datastax gremlin datastax-enterprise-graph

我需要一些帮助,因为我在图数据库中非常新。

我在DSE图上运行这个Gremlin查询:

g.V('user:589435392:512').out('events').inE('events')

图表视图返回

graph view

但Raw JSON返回:

{
  "id": "{out_vertex={member_id=512, community_id=589435392, ~label=user}, local_id=d2e29e60-5fc2-11e6-87aa-8d7f17e3c204, in_vertex={member_id=0, community_id=100599424, ~label=events}, ~type=events}",
  "label": "events",
  "type": "edge",
  "inVLabel": "events",
  "outVLabel": "user",
  "inV": "events:100599424:0",
  "outV": "user:589435392:512"
},
{
  "id": "{out_vertex={member_id=1, community_id=1205145984, ~label=user}, local_id=7c838fd0-6327-11e6-87aa-8d7f17e3c204, in_vertex={member_id=0, community_id=100599424, ~label=events}, ~type=events}",
  "label": "events",
  "type": "edge",
  "inVLabel": "events",
  "outVLabel": "user",
  "inV": "events:100599424:0",
  "outV": "user:1205145984:1"
}

我需要这样的事情:

{ 
    "event": {"some infos about this event"},
    "users": [{"user1"}, {"user2"},...]
}

如何实现JSON输出,该输出显示用户的所有事件以及事件的所有相关用户?

3 个答案:

答案 0 :(得分:1)

您应该尝试此查询:

g.V('user:589435392:512').out('events').
  project('event','users').by().by(__.in('events').fold())

答案 1 :(得分:0)

您可能希望查看此项目的数据模型。看起来好像用户是顶点而事件是边缘。您是否考虑过将事件创建为边缘?

根据现有的User --Event - >帮助处理gremlin语法。用户模型

g.V()。outE('Events')//将为您提供事件的所有边缘,包括指向边缘和边缘的顶点

在您编写的查询中使用out(),这相当于使用outE()。inV()

答案 2 :(得分:0)

description 是事件顶点的属性时,以下查询应该有效:

g.V().has('user','name','user1').out().as('event').in().as('user').select('event','user').by('description').by('name')
==>{event=some infos about this event, user=user1}
==>{event=some infos about this event, user=user2}

您可以在此处看到它:http://gremlinbin.com/bin/view/57bdda16b22b5

除此之外,我不会将事件用作边缘标签,而是选择更具描述性的内容,例如 triggeredEvent hadEvent ,或者类似的东西。