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

问题描述 投票:1回答:1

我正在使用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]
}
neo4j cypher
1个回答
0
投票

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

合并关系后,你需要将u的基数缩减到1,所以在你的MERGE之后但在你的返回之前加上这个:

WITH distinct u
© www.soinside.com 2019 - 2024. All rights reserved.