Gremlin соединяет несколько значений вершин

Мне нужна помощь, потому что я очень новичок в графических базах данных.

Я запускаю этот запрос Gremlin на своем графике DSE:

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

Возврат представления графика

представление графика

Но возврат 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, который показывает все события для пользователя и всех вовлеченных пользователей для событий?


person Marc Anyone    schedule 23.08.2016    source источник


Ответы (3)


Вы должны попробовать этот запрос:

g.V('user:589435392:512').out('events').
  project('event','users').by().by(__.in('events').fold())
person Daniel Kuppitz    schedule 24.08.2016
comment
Можете ли вы объяснить, что делает этот запрос? - person RyanQuey; 24.09.2020

Вы можете посмотреть модель данных с этим элементом. Создается впечатление, что Пользователь — это Вершина, а Событие — это ребро. Думали ли вы о создании событий в качестве ребер?

Чтобы помочь с синтаксисом гремлина на основе существующей модели User --Event--> User

g.V().outE('Events') // даст вам все ребра для событий, включая вершины, указывающие внутрь и наружу ребра

в написанном вами запросе вы используете out(), что эквивалентно использованию outE().inV()

person jlacefie    schedule 24.08.2016

Когда описание является свойством вершины события, должен работать следующий запрос:

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}

Кроме того, я бы не стал использовать events в качестве метки края, а вместо этого выбрал бы что-то более описательное, например triggeredEvent, hadEvent или что-то в этом роде. .

person Florian Hockmann    schedule 24.08.2016