2014-12-03 26 views
0

我在MongoDB中的格式保存用戶間的信息溝通低於MongoDB的 - 不同的多個領域,並取得最新的結果

instance = { 
    'from_user' : from_user, 
    'to_user' : to_user, 
    'message' : msg_text, 
    'date' : timezone.now(), 
} 

對於登錄的用戶我需要查詢他的溝通與所有其他人,只取他們的單個最近的消息文本。 例如從下面的數據集

{'from_user':'user1', 'to_user':'user2', 'message':'Hello World'} 
{'from_user':'user2', 'to_user':'user1', 'message':'Hello World2'} # most recent between user1 & user2 
{'from_user':'user1', 'to_user':'user3', 'message':'Hello World3'} 
{'from_user':'user3', 'to_user':'user4', 'message':'Hello World4'} 

查詢結果應該如下

{'from_user':'user2', 'to_user':'user1', 'message':'Hello World2'} 
{'from_user':'user1', 'to_user':'user3', 'message':'Hello World3'} 
+0

你的數據字段在哪裏? 'db.coll.find({})。sort({data:1})' – Barno 2014-12-03 11:18:23

+1

http://stackoverflow.com/questions/26725658/listing-the-last-message-of-each-conversation-involving-an -user-in-mongodb/26747130#26747130 - 看看這個。 – BatScream 2014-12-03 18:12:18

+0

BatScream,非常感謝。正是我在找什麼。 – Nish 2014-12-04 10:46:41

回答

0

以下查詢查找最近的消息或從用戶1:

db.msgs.find({ "$or" : [ { "from_user" : "user1" }, { "to_user" : "user1" } ] }) 
     .sort({ "date" : -1 }) 
     .limit(1) 

如果你想找到最新的消息給用戶以及來自用戶的最新消息,則需要兩個查詢:

db.msgs.find({ "from_user" : "user1" }).sort({ "date" : -1 }).limit(1) 
db.msgs.find({ "to_user" : "user1" }).sort({ "date" : -1 }).limit(1)