我试图在Cypher中编写一个查询,该查询能够找到具有标签的单个节点:CONVERSATION具有给定的邻居节点。邻居节点是具有标签的用户:USER和名为" username"的属性。 在查询中给出了"用户名" s的列表,并且期望的是找到对话节点,该对话节点具有在给定列表中具有用户名的所有用户作为其邻居。 我尝试了一些问题,但他们没有回复我想要的东西。是否有人知道查询的外观如何?
答案 0 :(得分:4)
假设您将给定的用户名作为{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