2014-08-27 2 views
4

Il existe la situation dans laquelle je dois correspondre à l'un des libellés du noeud.Neo4j Correspond à plusieurs étiquettes

Nous pouvons le faire pour les types de relations comme

(n)-[:KNOWS|LOVES]->(m) 

Peut-on adapter les étiquettes des nœuds comme celui-ci? par ex.

MATCH (c:computer)<-[:belongs_to]-(comp:HP|IBM) 
return comp 

Actuellement j'ai essayé ceci et ça donne des résultats, Y a-t-il un moyen plus simple?

MATCH (c:computer)<-[:belongs_to]-(comp) 
WHERE 'HP' IN labels(comp) OR 'IBM' IN labels(comp) 
return comp 
+0

FWIW Je pense que votre troisième exemple est assez simple, et une bonne approche. Vous pouvez rechercher en utilisant OPTIONAL MATCH (http://docs.neo4j.org/chunked/stable/query-optional-match.html), mais la requête qui en résulte ne serait pas plus simple que ce que vous avez. – FrobberOfBits

Répondre

6

Je pense

WHERE 'HP' IN labels(comp) OR 'IBM' IN labels(comp) 

ET

WHERE comp:HP OR comp:IBM 

Travaillera de la même manière la deuxième est simple à utiliser

1

Cette forme de votre dernière requête est au moins plus simple à écrire et comprendre plus facilement:

MATCH (c:computer)<-[:belongs_to]-(comp) 
WHERE comp:HP OR comp:IBM 
return comp; 
0

Actuellement confronté à ce même problème.

Depuis que je suis tout à fait quelques étiquettes apparie (! Révélant un peu une faille dans mon architecture) je l'ai trouvé ce qui suit pour résoudre ce problème de façon concise:

MATCH (n:computer) 
WHERE any(label in labels(n) WHERE label in ['HP', 'IBM']) 
RETURN n 
Questions connexes