2017-09-08 83 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