假設(shè)我的收藏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但循環(huán)應(yīng)該在服務(wù)器端。我懷疑使用聚合應(yīng)該是可行的,但似乎我需要為此編寫 JavaScript ......
1 回答

慕妹3146593
TA貢獻1820條經(jīng)驗 獲得超9個贊
使用聚合,首先匹配所需的值,然后按日期降序排序,使用 group 為每個名稱選擇列表中的第一個文檔。由于該列表按日期排序,因此這將是最新的。
db.collection.aggregate([
{"$match":{"value":{"$gt":0}}},
{"$sort":{"date":-1}},
{"$group":{"_id":"$name", "document":{"$first":"$$ROOT"}}},
{"$replaceRoot": {"newRoot": "$document"}} ])
(請注意,如果您索引,這會表現(xiàn)得更好{value:1, date:-1}
添加回答
舉報
0/150
提交
取消