我有以下架构:
(: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)
我在尝试查询User2
和BotUser
线程时遇到麻烦。由于BotUser
存在于每个线程中,如果我查询User2和BotUser之间的线程,那么neo4j将返回其中包含User2和BotUser的所有线程,这不是我想要的,我只想返回带有BotUser
和User2
。这是我当前正在使用的查询:
MATCH (user1:USER {id: User1Id}) -[:PART_OF_THREAD]->(thread:THREAD)<-[:PART_OF_THREAD]-(:USER {id: BotUserId})
RETURN thread
如何仅返回BotUser
和User1
返回线程?
如果不清楚,请随时提出一些问题
答案 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