Neo4j:如何根据连接的节点数返回查询结果?

时间:2018-11-05 08:35:11

标签: neo4j

我有以下架构:

(:Thread)
(:User)
(User)->[:PART_OF_THREAD]

当前,所有线程都将连接一个额外的(:User)节点,该节点代表一个机器人(该机器人执行自动消息等)。下面是每个线程的数据示例(2个用户+一个BotUser)

(Thread)<-[:PART_OF]-(User1)
(Thread)<-[:PART_OF]-(User2)
(Thread)<-[:PART_OF]-(BotUser)

注意::每个用户都有一个单独带有BotUser的线程。例如

(Thread)<-[:PART_OF]-(User2)
(Thread)<-[:PART_OF]-(BotUser)

我在尝试查询User2BotUser线程时遇到麻烦。由于BotUser存在于每个线程中,如果我查询User2和BotUser之间的线程,那么neo4j将返回其中包含User2和BotUser的所有线程,这不是我想要的,我只想返回带有BotUserUser2。这是我当前正在使用的查询:

MATCH (user1:USER {id: User1Id}) -[:PART_OF_THREAD]->(thread:THREAD)<-[:PART_OF_THREAD]-(:USER {id: BotUserId})
RETURN thread

如何仅返回BotUserUser1返回线程?

  • 我是否需要统计线程中的用户总数,并且仅在WHERE users.length> 2的情况下返回线程?
  • 还有什么我能做的吗?

如果不清楚,请随时提出一些问题

1 个答案:

答案 0 :(得分:2)

您的逻辑是正确的,计算成为线程一部分的用户数量的最快方法是获取线程上PART_OF关系的程度:

MATCH (user1:USER {id: User1Id}) -[:PART_OF_THREAD]->(thread:THREAD)<-[:PART_OF_THREAD]-(:USER {id: BotUserId})
WHERE size((thread)<-[:PART_OF_THREAD]-()) = 2
RETURN thread