Neo4j Cypher 和基于条件的查询构造

标签 neo4j cypher

我有以下 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/

相关文章:

尝试从 aws lambda 处理函数调用 SDN 时出现 java.lang.NullPointerException

neo4j - 将大型数据集导入 Neo4j(有一些变化)- 慢

python - 添加与现有节点的关系

Neo4j 节点属性类型

Neo4J Java Native API 与 Traversal API 与 Cypher

java - 在 OS X 上使用带有 neo4j 的 Java 7

neo4j - 根据 LOAD CSV 中的数据设置标签

javascript - 在 Neo4J 中通过 Cypher 添加语句之前删除/转义不需要的符号

neo4j - py2neo: py2neo.packages.httpstream.http.SocketError: 超时 - 执行、流或事务?

python - Py2neo (V4) - 属性错误 : 'Graph' object has no attribute 'find_one'