Neo4j的Cypher和嵌套的WHERE条件
问题描述:
我试图创建以下的Cypher查询:Neo4j的Cypher和嵌套的WHERE条件
MATCH (p:Permission)
WHERE NOT ((p)<-[:HAS|:CONTAINS*1..2]-(u:User) WHERE u.id = {userId}) AND p.minUserReputation <= {minUserReputation}
RETURN p
我需要在所有当前未分配的权限(NOT ((p)<-[:HAS|:CONTAINS*1..2]-(u:User)
)的返回到用户(与u.id = {userId}
)和通过分信誉值滤波(p.minUserReputation <= {minUserReputation}
)
目前,此查询失败,出现以下的Cypher错误:
Error executing Cypher; Code: Neo.ClientError.Statement.SyntaxError; Description: Variable `u` not defined
请帮助解决此查询。谢谢!
答
由于WHERE <pattern>
和WHERE EXISTS(<pattern>)
不允许额外的WHERE上的图案条款,最好先匹配的用户,让您使用您的WHERE子句,则包括该用户在您的谓词变量:
MATCH (u:User)
WHERE u.id = {userId}
MATCH (p:Permission)
WHERE p.minUserReputation <= {minUserReputation}
AND NOT (p)<-[:HAS|:CONTAINS*1..2]-(u)
RETURN p