我的人际关系看起来像这样
A-[:CHATS_WITH]->B - denotes that the user have sent at least 1 mesg to the other user
然后是消息
A-[:FROM]->message-[:SENT_TO]->B
反之亦然
B-[:FROM]->message-[:SENT_TO]->A
等等
现在我想选择给定用户聊天的所有用户以及两者之间的最新消息。
现在我已设法通过此查询获取两个用户之间的所有消息
MATCH (me:user)-[:CHATS_WITH]->(other:user) WHERE me.nick = 'bazo'
WITH me, other
MATCH me-[:FROM|:SENT_TO]-(m:message)-[:FROM|:SENT_TO]-other
RETURN other,m ORDER BY m.timestamp DESC
如何才能为每次对话返回最新消息?
答案 0 :(得分:1)
根据您已有的内容,您只想将LIMIT 1
标记为查询的结尾?
图形商店中的优先方式是手动管理链接列表以模拟交互流,在这种情况下,您只需选择列表的头部或尾部。这是因为您正在玩图形强度(遍历)而不是从每个Message
节点读取数据。
编辑 - 每个不同联系人的最后留言。
我认为你必须将所有的消息收集到一个有序的集合中然后返回头部,但是如果你有很多朋友/消息,这听起来会变得很慢。
MATCH (me:user)-[:CHATS_WITH]->(other:user) WHERE me.nick = 'bazo'
WITH me, other
MATCH me-[:FROM|:SENT_TO]-(m:message)-[:FROM|:SENT_TO]-other
WITH other, m
ORDER BY m.timestamp DESC
RETURN other, HEAD(COLLECT(m))