J'ai un groupe de nœuds comme l'image ci-dessous. Y a-t-il une requête de chiffrement qui peut vérifier si un nœud est éteint ou "allumé" (en vert); si elle est activée, elle renvoie le noeud auquel le noeud "on" se connecte et le noeud d'origine qui se connecte à "on". Si le noeud est "off", il renvoie simplement le noeud qui s'y connecte. Dans cet exemple, il doit renvoyer label1 et label2, mais pas label3.Neo4j Vérifier la propriété cypher
0
A
Répondre
1
Vous pouvez utiliser la combinaison de optional match
et with
comme union
:
// Is the starting node
MATCH (S {name: 'label1'})
WITH S
// Get the nodes to which have access through a pattern of "ON"
OPTIONAL MATCH (S)-[:connect]->({on: true})-[:connect]->(onC)
WITH S, collect(distinct onC) as onConnect
// Get the nodes to which have access through a pattern of "OFF"
OPTIONAL MATCH (S)-[:connect]->({on: false})<-[:connect]-(offC)
WITH S, onConnect, collect(distinct offC) as offConnect
// Remove possible duplicates
UNWIND S + onConnect + offConnect as N
RETURN collect(distinct N) as result
0
Je suppose que 'sur' et 'off' sont des états sur un paramètre. Je vais l'appeler Etat dans le code. Je suppose également que vous voulez commencer à un nœud spécifique. Je ne suis pas sûr comment vous obtenez ce noeud, donc je suppose que vous avez l'ID et il est égal à 1
MATCH (a) - [r: connect * ..] -> (b) où ID (n) = 1 b.State = 'on' return b
Que se passe-t-il si 'label3' se connecte à un autre nœud vert actif? – cybersam
Il devrait toujours retourner la même chose. Dans ce cas, nous commençons à label1, si nous devions commencer à label3, ce serait différent. –