猿问

如何在 mongo 查询中找到最新记录?

假设我的收藏c有这样的记录:


{ "_id": ..., "name":"foo", "date": "2020-02-02 ...", "value": 10 ...}

我想为每个 找到最新name的(by )记录,并带有肯定的。datevalue


就像是


def find_latest():

    res = {}

    for d in c.find({"value":{"$gt":0}}):

        key = d["name"]

        try:

            if d["date"] > res[key]["date"]:

                res[key] = d

        except KeyError:

            res[key] = d

    return res

但循环应该在服务器端。


我怀疑使用聚合应该是可行的,但似乎我需要为此编写 JavaScript ......


偶然的你
浏览 108回答 1
1回答

慕妹3146593

使用聚合,首先匹配所需的值,然后按日期降序排序,使用 group 为每个名称选择列表中的第一个文档。由于该列表按日期排序,因此这将是最新的。db.collection.aggregate([  {"$match":{"value":{"$gt":0}}},  {"$sort":{"date":-1}},  {"$group":{"_id":"$name", "document":{"$first":"$$ROOT"}}},  {"$replaceRoot": {"newRoot": "$document"}} ])(请注意,如果您索引,这会表现得更好{value:1, date:-1}
随时随地看视频慕课网APP

相关分类

Python
我要回答