2017-09-08 59 views
1

的集合我有以下的Neo4j的Cypher查询,检查是否Userentity之间存在关系,并返回布尔结果:Neo4j的暗号关系existis和ID

MATCH (u:User) WHERE u.id = {userId} MATCH (entity) WHERE id(entity) = {entityGraphId} RETURN EXISTS((u)<-[:OWNED_BY]-(entity)) 

请帮助,以便能够重写此查询接受{entityGraphIds}而不是单个{entityGraphId}的集合,并检查User与具有这些{entityGraphIds}的任何实体之间是否存在关系。

例如,我有user1entity1entity2user1entity2有关系。我将通过{user.id},如{userId}{entity1.id, entity2.id},如{entityGraphIds},并且此查询应返回true。

回答

2

我相信你可以简单地使用IN operator。考虑到这些参数:

:params {userId: 1, entityGraphIds : [2,3,4]} 

随后,查询:

MATCH (u:User) WHERE u.id = {userId} 
MATCH (entity) WHERE id(entity) IN ({entityGraphIds}) 
RETURN EXISTS((u)<-[:OWNED_BY]-(entity)) 

编辑:

如果你想在:User连接到至少1个实体返回true,那么你可以将您的查询简化为:

OPTIONAL MATCH (u:User)<-[:OWNED_BY]-(entity:Entity) 
WHERE u.id = {userId} AND id(entity) IN ({entityGraphIds}) 
RETURN u IS NOT NULL 
+1

感谢您的回答。一旦我测试它,我会在这里更新。 – alexanoid

+1

非常感谢!第二个查询非常好。感谢您的持续帮助! – alexanoid

+0

我很抱歉,但我在这个(第二个)查询中发现了一个问题 - '结果不是预期的大小。预计1行,但发现2'。当用户拥有2个或更多实体时会出现此错误。 – alexanoid