2016-06-29 49 views
1

我想在Cypher中寫一個查詢,它能夠找到具有給定鄰居節點的標籤的CONVERSATION單個節點。鄰居節點是標籤爲USER的用戶和名爲「username」的屬性。 在查詢中給出了「用戶名」的列表,並且期望的是找到具有給定列表中具有用戶名的所有用戶作爲其鄰居的對話節點。 我試過一些查詢,但他們不會返回我想要的。有沒有人知道查詢的外觀如何?Cypher返回一個節點與給定的鄰居

回答

3

假設你傳遞給用戶名作爲{users}參數,然後將用戶的對話之間的關係被命名爲IN_CONVERSATION

MATCH (c:Conversation) 
WHERE ALL(x IN {users} WHERE (:User {name:x})-[:IN_CONVERSATION]->(c)) 
RETURN c 

如果你想通過將用戶名在Neo4j的瀏覽器中測試查詢對於例如,你可以用WITH模擬參數:

WITH ["adam","john","sally"] AS users 
MATCH (c:Conversation) 
WHERE ALL(x IN users WHERE (:User {name:x})-[:IN_CONVERSATION]->(c)) 
RETURN c 

另一個解決方案是第一個匹配的用戶也:

MATCH (u:User) WHERE u.name IN {users} 
MATCH (c:Conversation) 
WHERE ALL(x IN collect(u) WHERE (x)-[:IN_CONVERSATION]->(c)) 
RETURN c