neo4j - 加入 Cypher 查询?

标签 neo4j cypher

看来我没有正确理解 OPTIONAL MATCH。

我有一个始终存在的节点 (t)。此节点 (t) 可以与其他节点 (q)、(o) 有关系——可能与两者或仅与其中之一有关。

我想在一个语句中捕捉类似的东西

“显示节点 (t) 的所有信息,如果有相关节点 (o),则显示所有 (o),如果有节点 (q),则显示 (q) - 如果其中之一不可用显示你有什么”

我可以同时进行 qith 匹配和可选匹配,例如

MATCH (t) -- (o) WHERE t.id = "1234" 
OPTIONAL MATCH (t) -- (q) 
RETURN q,t,o

无论是否有 (q),当我在 (t) 和 (o) 之间有一条路径时,我就成功了。但是当我没有(o)但有(q)时,我失败了。如果我切换并将 (q) 放在第一行,将 ((o) 放在第二行,反之亦然,我总是会丢失其中一个。

我需要如何查询才能同时获得 (o)、(q) 或其中一个,而不管它们中有哪一个?

编辑

  1. 所有节点(t)、(o)和(q)都有附加标签
  2. 我没有以正确的方式进行查询,因为我认为这无关紧要,所以失败的查询是 匹配 (o:Label3) -- (t:Label1) WHERE t.id = "1234" 可选匹配 (q:Label2) -- (t:Label1) 返回 q,t,o

最佳答案

如果你只是想获取连接到t的所有节点的集合:

MATCH (t) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (o)
RETURN t, COLLECT(o) AS others;

关于neo4j - 加入 Cypher 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44686534/

相关文章:

graph - neo4j或图形数据库存在哪些时间模式?

neo4j EntityNotFound 阻止密码匹配工作

database - 如何在 Cypher Neo4j 中获取不包含(关联)具有特定属性的节点的所有节点

node.js - 在 Node.js 中的 Cypher REST API 中向 Neo4j 提供 'query' 参数的正确方法

java - Neo4j 自动升级选项

graph - 在 Neo4J 中存储多个图形

c++ - Rexster/蓝图、Neo4j 和 C++

java - 如何在neo4j 2.0中使用索引进行同类搜索?

neo4j - 查找具有所有公共(public)中介的节点

Neo4j APOC 将 CSV 导出到特定目录