【发布时间】:2020-03-05 19:27:34
【问题描述】:
我的MongoDB 聚合管道中有以下阶段,它返回销售的数量和总和,效果很好:
{
$lookup: {
from: 'sales',
let: { part: '$_id' },
pipeline: [
{ $match: { $and: [{ $expr: { $eq: ['$partner', '$$part'] } }] } },
{ $group: { _id: null, qty: { $sum: 1 }, soldFor: { $sum: '$soldFor' } } },
{ $project: { _id: 0, qty: 1, soldFor: 1 } }],
as: 'sales'}},
{ $unwind: { path: '$sales', preserveNullAndEmptyArrays: true } },
{ $project: { _id: 1, sales: 1 }
}
但是,如果没有销售,那么 $project 投影会返回一个空的销售对象,但我真正想要的是它返回一个完整的对象,但带有 0 - 像这样:
{
sales: {
qty: 0,
soldFor: 0
}
}
【问题讨论】:
-
看看
$ifNull应该可以解决问题。请参阅文档:docs.mongodb.com/manual/reference/operator/aggregation/ifNull -
感谢@Flo - 真是太好了!
标签: mongodb pipeline aggregation