2014-11-05 57 views
0

我的關係是這樣的返回給用戶的聊天記錄與所有用戶和最新的消息在交談

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 

now我想選擇給定用戶聊天的所有用戶以及兩者之間的最新消息。

現在我設法讓兩個用戶之間所有消息與此查詢

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 

我如何才能只返回最新的消息,每個對話?

回答

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)) 

參見:Neo Linked ListsNeo Modelling a Newsfeed

+1

限制會讓我知道所有人的最新消息。每次對話都需要最後一條消息 – bazo 2014-11-05 16:47:13

相關問題