【问题标题】:MongoDB - distinct with multiple fields and get most recent resultMongoDB - 具有多个字段并获得最新结果
【发布时间】: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'}

【问题讨论】:

标签: mongodb mongoose pymongo aggregation-framework mongoengine


【解决方案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)

【讨论】:

    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    相关资源
    最近更新 更多