MongoDB聚合操作后如何从数组中移除空对象?
移除MongoDB聚合结果数组中的空对象
如果你执行db.name.aggregate()后得到包含空对象{}的数组结果,想要过滤掉这些空对象,可以通过在聚合管道中添加$project配合$filter操作符实现。
实现步骤
假设你的聚合管道通过$group等阶段将结果汇总到了一个数组字段(比如items),只需在管道末尾添加以下阶段:
{ $project: { items: { $filter: { input: "$items", cond: { $ne: ["$$this", {}] } } } } }
完整聚合示例
比如你的完整聚合命令可以写成:
db.name.aggregate([ // 这里是你的原有聚合阶段,比如$match、$project、$group等 { $group: { _id: null, items: { $push: "$$ROOT" } } }, // 过滤空对象的阶段 { $project: { items: { $filter: { input: "$items", cond: { $ne: ["$$this", {}] } } } } } ])
原理说明
$filter会遍历input参数指定的数组,只保留满足cond条件的元素。$ne: ["$$this", {}]表示判断当前数组元素$$this是否不等于空对象{},满足条件的元素会被保留在最终数组中。
这样处理后,聚合结果中的空对象就会被全部移除,得到你期望的输出。
内容的提问来源于stack exchange,提问作者Anshuman Kirty
相关产品推荐
相关产品推荐

