Cypher查询将搜索限制为特定子图

时间:2017-05-09 08:02:29

标签: neo4j cypher

我有一个Neo4j数据库,有许多断开连接的子图(按设计)。每个子图都有一个"组织"节点作为它的根/起始节点。目的是让每个组织只能查询自己的子图。

我在图表前面有一个webapp,它提供了用户所属组织的ID。组织的所有节点都与组织节点有关系。

如果您知道root / start节点,对特定子图执行查询的最佳方法是什么?

我一直在玩这个例子但它有效,但我想知道是否有更好的方法:

MATCH (org:Organization {org_id: 1}) WITH org
MATCH p=(user:User)-[:SITTING_IN]->(room:Room)
WITH p, user, room
WHERE (user)-[:MEMBER_OF]->(org) AND (room)-[:MEMBER_OF]->(org)
RETURN p

当节点数量随着更复杂的查询而增长时,这很快就会变得很麻烦,你必须记得在WHERE子句中检查它们。

1 个答案:

答案 0 :(得分:0)

如果所有组织图都是互斥的(无法通过遍历从一个到另一个),那么您只需要检查通过遍历找不到的节点(在这种情况下,'用户',但用户可以通过组织的遍历找到。因此,如果你从org开始,并从那里找到所有的遍历,你就不能输入任何其他的图表)。进一步检查应该始终如一的内容只会使Cypher做更多工作以进行无意义的验证。

由于每个图表是互斥的,因此遍历方向无关紧要。