MongoDB聚合管道如何查询数组不含指定元素的文档并按字段分组(Mongoose场景)
解决方案
你可以使用如下聚合管道实现需求,分为筛选、分组两个核心阶段:
// 替换为你要查询的目标用户名 const targetUser = "your_target_username"; const aggregationResult = await TestModel.aggregate([ // 第一阶段:筛选所有seenByUser数组不包含目标用户名的文档 { $match: { seenByUser: { $ne: targetUser } } }, // 第二阶段:按medicationStage字段分组 { $group: { _id: "$medicationStage", // 以下分组返回字段可根据实际需求调整 total: { $sum: 1 }, // 统计当前分组下的文档数量 list: { $push: "$$ROOT" } // 保留当前分组下所有原始文档内容,不需要可删除 } } ]);
说明
- 如果你更习惯使用
$nin语法,$match阶段也可以写成如下形式,效果完全一致:$match: { seenByUser: { $nin: [targetUser] } } - 如果你不需要保留分组内的原始文档,删除
$group阶段的list字段配置即可。 - 如果需要对分组结果排序,可以在管道最后追加
$sort阶段,例如按medicationStage正序排序:{ $sort: { _id: 1 } }
内容的提问来源于stack exchange,提问作者Soumalya Bhattacharya
相关产品推荐
相关产品推荐

