Man, I am loving Cypher. Thanks so much guys for introducing it. I'm a bit
stuck on one query, though, and I wanted to ask for help. I think the
reasons I'm stuck are related to the two feature requests I made yesterday
(optional matches, and returning IDs).

I want to fetch first- and second-degree friends in one query, in a way that
preserves the first-degree friend(s) for each second-degree friends. Assume
an asymmetrical friendship model, like Twitter's following, because that
makes things a bit easier.

Here's a simple transitive example:

- Alice follows Bob and Carol.
- Bob follows Carol and Dave.
- Carol follows Dave and Alice.


I want to fetch Alice's first-degree friends (Bob and Carol) and each of
their first-degree friends ((Carol and Dave) for Bob, and (Dave and Alice)
for Carol). This example is easy enough:

START zero=(Alice)
MATCH (zero) -[:FOLLOWS]-> (first) -[:FOLLOWS]-> (second)
RETURN first, second


I expect to get back results like:

- Bob, Carol
- Bob, Dave
- Carol, Dave
- Carol, Alice


This is great because I can get Alice's first-degree friends by unique()'ing
the first column, for each person, I know their second-degree friends via
the second column.

But this doesn't work if any of my first-degree friends don't follow anyone.
For that, it would be great if I could specify that the second part of that
match was "optional", and I'd get back a row like this in that case:

- Elizabeth, <null>

If I'm returning nodes, it also duplicates a ton of info: each first-degree
friend's info is returned in full for each of their friends. Maybe there's
no way around that, but this is also where I would find it convenient to be
able to return IDs somehow for all but one of the results.

Just thinking out loud here, but I'd greatly appreciate any feedback or
ideas for this scenario. Thanks much!

Aseem
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to