使用 Cypher 我可以找到 2 个远距离节点之间的特定关系

Using Cypher can I find a specific relationship between 2 distant nodes

我有两个彼此没有直接关系的节点我知道起始节点、结束节点和结束节点上的关系。例如

(u:USER)-[]->()-[]->()-[:WRITE]->(p:POST)

有没有我可以写的查询 return 'p' 给我?此外,它们之间的所有关系都不是 WRITE,所以我不能使用 [:WRITE*]


第二个问题:我在考虑权限和关系。在我的模型中,用户在某个实体上有关系,该实体与另一个实体一直到 POST 上的 WRITE 关系,因此我想说 USER 在 POST 上有 WRITE 关系。但也许我在想这个错误?也许我应该直接在 POST 上给 USER WRITE?

谢谢!

与关系数据库相比,Neo4j 的一大优势是您不必知道节点的标签或它们之间的关系即可执行有用的查询。

如果你尝试

(u:User)-[*]->()-[:WRITE]->(p:Post) return p

它应该给你你想要的。

图表的结构将决定此查询的效率。如果 :USER 和 :POST 之间的图本质上是一棵树,那么上面的查询应该非常有效。但是,如果中间节点和关系形成一个网络,那么查询可能会花费大量时间探索 :User 和 :Post 之间的所有路径,在这种情况下,您的想法是将 :User 链接到 :Post 通过单身关系将是有益的。