假设我的收藏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 ......
1 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
使用聚合,首先匹配所需的值,然后按日期降序排序,使用 group 为每个名称选择列表中的第一个文档。由于该列表按日期排序,因此这将是最新的。
db.collection.aggregate([
{"$match":{"value":{"$gt":0}}},
{"$sort":{"date":-1}},
{"$group":{"_id":"$name", "document":{"$first":"$$ROOT"}}},
{"$replaceRoot": {"newRoot": "$document"}} ])
(请注意,如果您索引,这会表现得更好{value:1, date:-1}
添加回答
举报
0/150
提交
取消