MongoDB - 具有多个字段并获得最新结果

Posted

技术标签:

【中文标题】MongoDB - 具有多个字段并获得最新结果【英文标题】:MongoDB - distinct with multiple fields and get most recent result 【发布时间】:2015-01-31 21:56:58 【问题描述】:

我在 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'

【问题讨论】:

您的数据字段在哪里? db.coll.find().sort(data:1) ***.com/questions/26725658/… - 看看这个。 蝙蝠尖叫,非常感谢。正是我想要的。 【参考方案1】:

以下查询查找发往用户 1 或来自用户 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)

【讨论】:

以上是关于MongoDB - 具有多个字段并获得最新结果的主要内容,如果未能解决你的问题,请参考以下文章

多个子字段的 MongoDB 查询匹配

如何获得满足 mongodb 中字段所有条件的用户?

如何在redis中存储多个字段,并根据某些字段获得前10个结果

如何在 MongoDB 中搜索动态字段并首先对最佳匹配结果进行排序

具有多个字段的类似 MongoDB 的语句

具有多个字段的Spring数据mongoDB推送操作不起作用