You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合分组后如何对组内重复数据按date字段排序

MongoDB聚合分组保留排序顺序去重解决方案

你当前方案失效的核心原因是$addToSet是集合类型算子,本身不保留元素插入顺序,即便前置了$sort排序,分组阶段$addToSet也会打乱原有顺序生成无序列表,无法保证数组首位是最早的记录。


推荐解决方案(兼容性最佳)

改用$push算子替代$addToSet即可:$push会严格按照输入顺序将元素追加到数组,只要提前按日期完成升序排序,分组生成的unique_ids数组就会天然按旧记录到新记录的顺序排列。且MongoDB的_id是默认全局唯一主键,不会出现重复值,完全可以替代$addToSet的去重作用。

修改后的聚合代码如下:

issue = collection.aggregate([
    # 第一步:按日期升序排序,保证旧记录在前
    {'$sort': {'date': 1}},
    # 第二步:分组,用$push替代$addToSet保留排序顺序
    {'$group': {
        '_id': {
            'FeatureName': '$FeatureName', 
            'ExposureTime': '$exp1',
            'Joint1': '$J1', 
            'Joint2': '$J2', 
            'Joint3': '$J3',
            'Joint4': '$J4',
            'Joint5': '$J5', 
            'Joint6': '$J6', 
            'Joint7': '$J7'
        },
        'unique_ids': {'$push': '$_id'},
        'count': {'$sum': 1}
    }},
    # 第三步:过滤出有重复的分组
    {'$match': {'count': {'$gt': 1}}}
])

# 后续处理逻辑保持不变即可:数组第一位是最早的记录,剩余全部加入待删列表
for matches in issue:
    del matches['unique_ids'][0]
    for i in matches['unique_ids']:
        remove.append(i)

内容的提问来源于stack exchange,提问作者NicPy4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:36:03