2014-12-03 48 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)