Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
08-20-2021 10:23 AM
Hello
I have the following situation: a Person is a member of a Family, and she/he can be related to another Person in that Family (in this scenario, one is the Father of the other). The Family has a top cat (named Paterfamilias) who manages the information of that Family.
When a Family is created, there is only the Paterfamilias linked to it, no other family member - one.uuid (Person).
This is the cypher I use to retrieve data from the Family node:
MATCH (pater:Person)-[:IS_PATERFAMILIAS]->(family:Family)
OPTIONAL MATCH (one:Person)-[:IS_MEMBER_OF]->(family)
WHERE family.uuid = $familyUuid
RETURN
family.uuid AS familyUuid,
family.description AS description,
pater.uuid AS paterfamiliaId,
one.uuid AS oneId,
toString(family.updatedAt) AS updatedAt,
toString(family.createdAt) AS createdAt
It works well when the familyUuid exists. This is the result:
familyUuid description paterfamiliaId oneId updatedAt createdAt
"aa547c6b-94ce-4489-afe9-8a1a2bd87e4f" "Jaca" "bb9b7b14-7a06-43b1-bc16-9c00453b8c38" "8a9c349e-bfb4-47cd-8e11-c3e484be3e93" "2021-08-20T12:29:33Z" "2021-08-05T22:58:26Z"
However, if the specific familyUuid doesn't exist, this query returns any other existing family in the Graph and the problem is the OPTIONAL MATCH. But I don't know why it does that.
Is there a better way to query the data from the Family, whether or not exist other family members?
I'm using neo4j:4.3.1-enterprise on docker.
08-20-2021 11:16 AM
Hi @renatospaka!
Can you try using the Where condition before the optional Match and then using WITH *.
The problem is that your WHERE is filtering the optional and not your first Match.
H
All the sessions of the conference are now available online