MongoDB如何查询每个不同姓名对应最新日期的完整文档
你遇到的问题根源是:对date1和city分别使用$max运算时,两个字段的计算是完全独立的,你拿到的确实是最大的date1,但$max: "$city"是按字符串字典序计算出的最大值,和最大date1对应的city没有关联,才会出现字段不匹配的情况。
可以用先排序再分组取首条的逻辑来修正查询,正确的聚合语句如下:
db.getCollection('students').aggregate([ // 筛选状态为ACTIVE的文档 { $match: { status: "ACTIVE" } }, // 同姓名下按日期倒序排列,最新的记录排在同组最前面 { $sort: { name: 1, date1: -1 } }, // 按姓名分组,直接取每组第一条记录的对应字段,保证字段来自同一条最新文档 { $group: { _id: "$name", city: { $first: "$city" }, date1: { $first: "$date1" } } }, // 调整输出字段格式,匹配你需要的返回结构 { $project: { _id: 0, name: "$_id", city: 1, date1: 1 } } ])
运行上述语句即可得到你期望的正确结果。
内容的提问来源于stack exchange,提问作者Adriano
相关产品推荐
相关产品推荐

