我有以下 Cypher 查询:
MATCH (d:Decision)<-[:DEFINED_BY]-(ch:Characteristic)
WHERE d.id = {ownerDecisionId} and ch.lowerName = LOWER({name})
OPTIONAL MATCH (ch)-[rcho:CONTAINS]->(cho:CharacteristicOption)
RETURN ch, rcho, cho
有时我不需要查询的以下部分:
OPTIONAL MATCH (ch)-[rcho:CONTAINS]->(cho:CharacteristicOption)
现在我将为此目的引入一种具有不同查询的新方法,但我想问一下 - 它是实现此目的的首选方法还是 Cypher 中有另一种方法......例如我可以引入一些新的 bool 变量,根据它的值,我可以添加一个条件以返回(或不返回)以下信息:OPTIONAL MATCH (ch)-[rcho:CONTAINS]->(cho:CharacteristicOption)
最佳答案
下面的查询可以在不需要使用 APOC 的情况下做你想做的事情。它假定 executeOptionalMatch
是一个 bool 参数,指示是否应执行 OPTIONAL MATCH
。
MATCH (d:Decision)<-[:DEFINED_BY]-(ch:Characteristic)
WHERE d.id = {ownerDecisionId} and ch.lowerName = LOWER({name})
OPTIONAL MATCH (ch)-[rcho:CONTAINS]->(cho:CharacteristicOption)
WHERE {executeOptionalMatch}
RETURN ch, rcho, cho
您可以获得PROFILE查询以查看 OPTIONAL MATCH
在执行其 WHERE
之前是否做了任何重要的工作。我在我的 neo4j 版本中获得的配置文件显示,WHERE
过滤是在 OPTIONAL MATCH
执行任何实际工作之前完成的。
关于Neo4j Cypher 和基于条件的查询构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46079172/