Glide
Glide

Reputation: 21275

Simple outer-join like gremlin query not returning any results

I wrote the simple query below to traversal between Person to Country but it’s not returning any results.

g.V().hasLabel("Person").as("p").out("from").hasLabel("Country").as("c").select("p", "c")

In the actual data, only Person vertices exists and no Country vertices or from edges exist. I expected to at least return p - basically I want to do a left outer join. However, if I have Country and from data as well, the query returns results.

I tried another query using match as well but still no results unless there are actual data:

g.V().hasLabel("Person").has("name","bob").match(__.as("p").out("from").hasLabel("Country").as("c")).select("p", "c")

I'm running these queries against Datastax Enterpise Graph.

Any idea why it’s returning no results?

Upvotes: 0

Views: 1522

Answers (1)

stephen mallette
stephen mallette

Reputation: 46226

The result you are getting is expected. If there are no "from" edges then the traverser essentially dies and does not proceed any further. Perhaps you could consider using project():

g.V().hasLabel("Person").
  project('name','country').
    by('name')
    by(out('from').hasLabel('Country').values('name').fold())

With the "modern" toy graph in TinkerPop, the output looks like this:

gremlin> g.V().hasLabel('person').project('name','knows').by().by(out('knows').values('name').fold())
==>[name:v[1],knows:[vadas,josh]]
==>[name:v[2],knows:[]]
==>[name:v[4],knows:[]]
==>[name:v[6],knows:[]]

In the future, when you submit questions about Gremlin, please include a Gremlin script that can be pasted into a Gremlin Console which makes it easier to try to more directly answer your specific question.

Upvotes: 5

Related Questions