2017-09-14 2 views
1

Dans une base de données Neo4J, je dois trouver un modèle (complexe) avec 3 nœuds nommés (disons a, b, c) et d'autres nœuds non nommés, mais seulement s'il y a aucun noeud (disons "x") qui se connecte à a, b et c.Cypher O WH N'EXISTE PAS avec la variable nommée

Je voudrais écrire quelque chose comme:

MATCH (a:A)-<something>-(b:B)-<something>-(c:C) 
WHERE NOT EXISTS ((a)--(x:X)--(b), (x)--(c)) 
RETURN a, b, c 

Mais je reçois "Variable x non défini". Ce serait facile si x était seulement interdit s'il était connecté à (a) et (b). Et NOT EXISTS (a)--(:X)--(b) AND NOT EXISTS (a)--(:X)--(c) est trop fort.

Des idées?

Répondre

0

Vous devriez essayer MATCH ing x:X et utiliser la WHERE:

MATCH (x:X), (a:A)-<something>-(b:B)-<something>-(c:C) 
WHERE NOT EXISTS ((a)--(x)--(b), (x)--(c)) 
RETURN a, b, c 
+0

Merci, si simple! Est-sons que je dois partager mon "EXISTE PAS" pièces en deux: 'MATCH (x: X), (a: A) - - (b: B) - - (c: C) NOT EXISTS ((a) - (x) - (b)) ET NON EXISTE ((x) - (c)) RETURN a, b, c' – Vandy

+0

Ok, la solution fonctionne pour les petits ensembles de données , mais il faut un produit cartésien ... Je dois arrêter ma demande après des heures, j'ai presque un milliard de nœuds :-(Une autre idée? – Vandy

+0

@Vandy vous pouvez essayer de diviser la requête en deux 'MATCH', comme: 'MATCH (x: X) MATCH (a: A) - - (b: B) - - (c: C) O WH N'EXISTE PAS ((a) - (x) - (b), (x) - (c)) RETURN a, b, c'. –