检查路径的每一个关系都会触发太多的数据库命中



我正在运行一个查询,以查找从用户到neo4j中权限节点的路径,我想确保它不会遍历某些关系。因此,我使用了以下密码:

PROFILE 
MATCH path = (u:user { _id: 'ea6b17e0-3b9e-11ea-b206-e7610aa23593' })-[r:accessRole|isMemberOf*1..5]->(n:PermissionSet { name: 'project'})
WHERE all(x IN r WHERE NOT (:PermissionSet)-[x]->(:user))
RETURN path

我没想到where子句会引发这么多点击。我认为我的考试写得不对。(对于"(:PermissionSet(-[x]->(:用户(";

有什么建议吗?

不确定这是正确的答案,但我添加了一个WITH语句

PROFILE 
MATCH path = (u:user { _id: 'ea6b17e0-3b9e-11ea-b206-e7610aa23593' })-[r:accessRole|isMemberOf*1..5]->(n:PermissionSet { name: 'project'})
WITH path,r
WHERE all(x IN r WHERE NOT (:PermissionSet)-[x]->(:user))
RETURN path

以及";(:PermissionSet(-[x]->(:用户(";被击出2800支安打。

我能猜出为什么会这样,但我希望有更多专家的解释,有更好的方法吗?(这种方式对我的性能很好(

最新更新