Neo4j 检查单个节点的多个关系,如果存在,则 Return
Neo4j Check a Single Node for multiple Relationships and Return if either exists
我正在尝试测试单个节点上是否存在任何 2 个模式。如果两种模式都存在,我会得到一个结果,但是如果只有一种模式存在,我就不会得到任何结果。如果存在一种或两种模式,我该如何编写查询以获得结果?
(这是一个例子,如果两种模式都存在 - 结果是 Returned)
匹配(特征)<-[:HAS]-(事物 {name:'ball'})<-[:IS_A*]-(后代)-[r:HAS]->(特征)
MATCH (characteristic2)-[r2:HAS]->(thing2 {name:'ball'})<-[:IS_A*]-(decendent2)<-[:HAS]-(characteristic)
RETURN 正派, 正派2
现在想象一下,如果我只有反弹关系。上面的查询将 Return Nothing。只有 Returns 如果两者都为真。如果其中任何一个为真,我该如何匹配?
看看OPTIONAL MATCH
https://neo4j.com/docs/cypher-manual/current/clauses/optional-match/
您的查询可以改写为,
MATCH (characteristic)<-[:HAS]-(thing {name:'ball'})<-[:IS_A*]-(decendent)-[r:HAS]->(characteristic)
OPTIONAL MATCH (characteristic2)-[r2:HAS]->(thing2 {name:'ball'})<-[:IS_A*]-(decendent2)<-[:HAS]-(characteristic)
RETURN decendent, decendent2
如果任一后代与相应的子句匹配,这将 return 结果
我正在尝试测试单个节点上是否存在任何 2 个模式。如果两种模式都存在,我会得到一个结果,但是如果只有一种模式存在,我就不会得到任何结果。如果存在一种或两种模式,我该如何编写查询以获得结果?
(这是一个例子,如果两种模式都存在 - 结果是 Returned)
匹配(特征)<-[:HAS]-(事物 {name:'ball'})<-[:IS_A*]-(后代)-[r:HAS]->(特征)
MATCH (characteristic2)-[r2:HAS]->(thing2 {name:'ball'})<-[:IS_A*]-(decendent2)<-[:HAS]-(characteristic)
RETURN 正派, 正派2
现在想象一下,如果我只有反弹关系。上面的查询将 Return Nothing。只有 Returns 如果两者都为真。如果其中任何一个为真,我该如何匹配?
看看OPTIONAL MATCH
https://neo4j.com/docs/cypher-manual/current/clauses/optional-match/
您的查询可以改写为,
MATCH (characteristic)<-[:HAS]-(thing {name:'ball'})<-[:IS_A*]-(decendent)-[r:HAS]->(characteristic)
OPTIONAL MATCH (characteristic2)-[r2:HAS]->(thing2 {name:'ball'})<-[:IS_A*]-(decendent2)<-[:HAS]-(characteristic)
RETURN decendent, decendent2
如果任一后代与相应的子句匹配,这将 return 结果