首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >引用关系时Cypher返回重复结果

引用关系时Cypher返回重复结果
EN

Stack Overflow用户
提问于 2021-11-06 14:45:45
回答 1查看 58关注 0票数 1

我有一个cypher查询,它返回推荐给用户跟踪的用户列表,但在执行cypher时得到重复的结果。

下面是cypher查询:

代码语言:javascript
运行
复制
MATCH (user:User { id: $userId })
MATCH (user)-[interestRel:INTERESTED_IN]->()<-[:INTERESTED_IN]-(recommendedUsers)
WITH DISTINCT recommendedUsers, interestRel, user
WHERE NOT recommendedUsers = user AND
    NOT exists((user)-[:FOLLOWING]->(recommendedUsers))
RETURN recommendedUsers {
    .id,
    following: false
} ORDER BY interestRel.interestLevel DESC SKIP $skip LIMIT $limit

我知道会有重复,因为一个用户可能是INTERESTED_IN多个节点,所以当遍历INTERESTED_IN关系时,对于每个具有INTERESTED_IN关系的节点,将返回重复的用户。但是我正在返回DISTINCT用户,所以我不明白为什么仍然返回重复的用户。

我注意到,当INTERESTED_IN关系绑定到查询中使用的变量(interestRel)时,就会返回重复的结果。

如何在去掉重复项的同时仍然引用INTERESTED_IN (interestRel)关系?

EN

回答 1

Stack Overflow用户

发布于 2021-11-06 18:59:12

DISTINCT在您的例子中过滤掉recommendedUsers、interestRel、user的不同组合,而不仅仅是distinct用户。因此,当您有一个与用户有两个共同兴趣的recommendedUser时,他出现两次是合乎逻辑的。

您似乎有兴趣返回对user高度感兴趣的内容感兴趣的recommendedUser

也就是说,我将按如下方式编写查询:

代码语言:javascript
运行
复制
MATCH (user:User { id: $userId })-[interestRel:INTERESTED_IN]->()<-[:INTERESTED_IN]-(recommendedUser)
WITH user,recommendedUser,
     MAX(interestRel.interestLevel) AS interestLevel
WHERE NOT recommendedUser = user AND
      NOT exists((user)-[:FOLLOWING]->(recommendedUser))
RETURN interestLevel,
       recommendedUser {
                 .id,
                 following: false
       } ORDER BY interestLevel DESC SKIP $skip LIMIT $limit

注意:我使用单数形式,所以recommendedUser b/c我认为它使查询更容易理解。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69864989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档