MongoDB查询调整:获取未删除对象的‘活跃’计数
调整MongoDB聚合查询以统计未删除对象的活跃计数
要实现类似RDS中where deleted is null的过滤效果,同时修正原查询的分组语法错误,你需要对聚合管道做以下调整:
在$match阶段添加未删除过滤条件:
新增对deleted字段的匹配,只保留该字段为null(或不存在该字段)的文档,确保统计的都是未被删除的对象。修正$group阶段的分组键:
MongoDB的$group阶段必须使用_id作为分组键,且引用字段时需要加$前缀,原查询中的"id" : "field.type"写法错误,会导致分组不符合预期。
修改后的完整查询如下:
db.getCollection("events").aggregate( [ { "$match": { "caseid": "0gke34", "field.type": { "$ne": null }, // 过滤未被删除的文档:deleted为null或字段不存在 "$or": [ { "deleted": null }, { "deleted": { "$exists": false } } ] } }, { "$group": { "_id": "$field.type", // 正确的分组键写法 "TotalCount": { $sum: 1 } } } ] )
补充说明:
- 如果你的业务中,删除操作只会将
deleted字段设为null(不会出现字段不存在的情况),可以简化过滤条件为"deleted": null,即:"$match": { "caseid": "0gke34", "field.type": { "$ne": null }, "deleted": null } - 修正后的
_id: "$field.type"会按照field.type字段的值进行分组,从而得到每种类型的正确计数。
内容的提问来源于stack exchange,提问作者sean
相关产品推荐
相关产品推荐

