При добавлении simplePath()
в match()
мой запрос больше не возвращает результаты.
Запрос пытается найти любое событие (например, «Конференция по базе данных графа»), в котором каким-то образом участвуют три конкретных человека.
- «Алиса» посещала школу, где проходило мероприятие.
- «Боб» был продавцом хот-дога на этом мероприятии.
- «Марко» обеспечил безопасность мероприятия.
Я использую match()
, чтобы найти место, где сходятся три человека. Если есть лучший способ, пожалуйста, предложите его. Спасибо! Только начинаю изучать гремлин.
Искусство Ascii:
alice --[enrolled-in]-> gremlin 101 --[offered-by]-> graph db school --[hosted]--------------
|
v
bob --[works-for]-> hot dogs r awesome --[subcontractor-of]-> best event planner --[planned]----> graph conference
^
|
marko --[works-for]-> super security --[secured]-------------
Запрос, который работает:
g.V().match(
__.as('alice').hasLabel('person').has('name', 'alice').repeat(__.out()).until(__.hasLabel('event')).as('event'),
__.as('event').repeat(__.in()).until(__.hasLabel('person').has('name', 'bob')).as('bob'),
__.as('event').repeat(__.in()).until(__.hasLabel('person').has('name', 'marko')).as('marko')).
path()
==>[v[0],v[0],v[2],v[5],v[21],v[21],v[13],v[10],v[8],v[21],v[18],v[16],[bob:v[8],alice:v[0],event:v[21],marko:v[16]]]
Обратите внимание, что некоторые вершины появляются более одного раза (а мы еще не добавили циклов!)
Когда я добавляю .simplePath()
к любому из repeat()
s, запрос ничего не возвращает. Например, внутри первого repeat()
g.V().match(
__.as('alice').hasLabel('person').has('name', 'alice').repeat(__.out().simplePath()).until(__.hasLabel('event')).as('event'),
__.as('event').repeat(__.in()).until(__.hasLabel('person').has('name', 'bob')).as('bob'),
__.as('event').repeat(__.in()).until(__.hasLabel('person').has('name', 'marko')).as('marko')).
path()
гном-консоль:
alice = g.addV('person').property('name', 'alice').next()
gremlin101 = g.addV('course').property('name', 'gremlin 101').next()
g.addE('enrolled-in').from(alice).to(gremlin101)
school = g.addV('school').property('name', 'graph db school').next()
g.addE('offered-by').from(gremlin101).to(school)
bob = g.addV('person').property('name', 'bob').next()
hotDogs = g.addV('business').property('name', 'hot dogs r awesome').next()
g.addE('works-for').from(bob).to(hotDogs)
eventPlanner = g.addV('business').property('name', 'best event planner').next()
g.addE('subcontractor-of').from(hotDogs).to(eventPlanner)
marko = g.addV('person').property('name', 'marko').next()
security = g.addV('business').property('name', 'super security').next()
g.addE('works-for').from(marko).to(security)
event = g.addV('event').property('name', 'graph conference').next()
g.addE('hosted').from(school).to(event)
g.addE('secured').from(security).to(event)
g.addE('planned').from(eventPlanner).to(event)