如何在neo4j中为不同标签返回多个匹配的单个节点?

时间:2017-12-17 09:34:31

标签: neo4j cypher

我正在使用neo4j 3.2.x.我尝试做的是编写一个查询,它将更新两个节点(用户和性别)之间的关系,并返回单个用户节点,其中InterestedInGender属性从关系作为数组拉出。以下查询存在问题,因为它现在返回具有singleInGender单个值的多个记录。关系是正确创建的,但在返回数据时会返回多个记录。我只想返回用户节点。有没有办法我们可以修复此查询只返回单个用户节点。

MATCH (u:User {_id:"1234"}) 
MATCH (ig:Gender) WHERE ig.value IN ["male", "female"]
WITH u, ig
OPTIONAL MATCH (u)-[igr:INTERESTED_IN_GENDER]->()
DELETE igr
with u, ig
MERGE (u)-[:INTERESTED_IN_GENDER]->(ig)
RETURN u{
  ._id,
  interestedInGender: [(u)-[:INTERESTED_IN_GENDER]->(ig:Gender) | ig.value]
}

1 个答案:

答案 0 :(得分:0)

您获取多个记录(行)的原因是因为您的ig与性别匹配与两个匹配:性别节点...两行中两行具有相同的u节点,但不同的ig节点。在您的查询的其余部分中,该基数仍然存在,因此您将获得两行。

在合并关系后,您需要将u的基数缩减为1,因此在合并之后但在返回之前添加此内容:

WITH distinct u