Neo4j 将搜索限制到特定子图的密码查询
我有一个Neo4j数据库,其中有许多断开连接的子图(根据设计)。每个子图都有一个“组织”节点作为其根/开始节点。目的是让每个组织只能查询自己的子图 我在图表前面有一个webapp,它提供了用户所在组织的ID。组织的所有节点都与组织节点存在关系 如果知道根节点/开始节点,对特定子图强制执行查询的最佳方法是什么? 我一直在玩这个例子,它是有效的,但我想知道是否有更好的方法:Neo4j 将搜索限制到特定子图的密码查询,neo4j,cypher,Neo4j,Cypher,我有一个Neo4j数据库,其中有许多断开连接的子图(根据设计)。每个子图都有一个“组织”节点作为其根/开始节点。目的是让每个组织只能查询自己的子图 我在图表前面有一个webapp,它提供了用户所在组织的ID。组织的所有节点都与组织节点存在关系 如果知道根节点/开始节点,对特定子图强制执行查询的最佳方法是什么? 我一直在玩这个例子,它是有效的,但我想知道是否有更好的方法: MATCH (org:Organization {org_id: 1}) WITH org MATCH p=(user:Use
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子句中检查所有节点。如果所有组织图都是互斥的(无法通过遍历从一个组织图到另一个组织图),那么您只需要检查通过遍历未找到的节点(在本例中为“user”,但可以通过遍历org找到user。因此,如果您从org开始,然后以遍历的方式查找所有内容,则无法输入任何其他图形)。对应该始终为真的内容进行额外检查,只会使Cypher上的工作更为繁重,从而实现无意义的验证
因为每个图都是互斥的,所以遍历方向并不重要。检查是的,这是有意义的。所以类似这样的东西:(?)
MATCH(org:Organization{org\u id:1})和orgMATCH p=(org)(room:room)返回p
@devnull是的。只要您匹配组织节点,并且您匹配的其他所有内容在返回组织的查询链接中都有某种形式的关系链,那么匹配的所有内容都将用于该组织(通过返回org/org.id作为一列,您可以匹配多个组织,而org列将告诉您在哪个组织中找到了匹配。)