3 votes

Cypher sélectionne les sommets dont tous les voisins ne contiennent pas de propriété.

enter image description here

{
    "identity": 7,
    "labels": [
        "Parent"
    ],
    "properties": {
        "name": "foo1"
    }
}, 
{
    "identity": 8,
    "labels": [
        "Child"
    ],
    "properties": {
        "name": "bar2"
    }
}, 
{
    "identity": 9,
    "labels": [
        "Child"
    ],
    "properties": {
        "name": "bar1"
    }
}, 
{
    "identity": 10,
    "labels": [
        "Parent"
    ],
    "properties": {
        "name": "foo2"
    }
}

Je veux sélectionner le Parents qui n'ont pas de enfant con name='abc'

Comportement attendu : Je devrais obtenir les deux parents ( foo1 y foo2 ) comme résultat

Requête1 :

Match (x1:Parent) with x1 
optional Match (x1)-[:CHILD]-(x2:Child) with x1 , collect(x2) as x3 
UNWIND x3 as x2 
WITH x1 , x2 , x3 
where none (x IN  x3 where x.name IN ['abc']) 
return DISTINCT x1 

Cette requête ne me renvoie que 1 Parent( foo1 ) mais il devrait retourner les deux parents et le second parent( foo2 ) n'est connecté à aucun enfant.

PS : Raison de l'utilisation UNWIND est d'utiliser les variables pour d'autres WHERE clauses sur les variables x2 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X