【发布时间】:2016-05-18 00:50:20
【问题描述】:
我有一个包含包的数据模型,每个包都有一个产品文档数组。 每个产品文档都有一个价格和一个 isTaxable:boolean 字段
我可以汇总获取每个包裹的小计 (product.price $sum),但我不知道如何“也”在同一聚合中获取 taxSubtotal,这包括获取单独的product.isTaxable 为 true 的 product.price 的总和
这是包裹记录的样子:
// Package
{
_id: 1,
packTitle: "Package 1",
productCategory: {_id:90, label:"Clothing"},
products: [
{ _id:500,
"prodTitle": "Product 1",
"price": 2.99,
"isTaxable" : true
},
{ _id:501,
"prodTitle": "Product 2",
"price": 4.99,
"isTaxable" : false
},
{ _id:502,
"prodTitle": "Product 3",
"price": 6.99,
"isTaxable" : true
},
{ _id:503,
"prodTitle": "Product 4",
"price": 10.99,
"isTaxable" : false
}
]
}
我可以得到小计:
db.prodPacks.aggregate([
{$match: { "productCategory._id": {$in:[90]} }}
, {$unwind: '$products'}
, {$group: {
'_id': {'packId':'$_id', 'packTitle':'$packTitle'},
'packSubtotal': {$sum: '$products.price' },
'products':{'$push':'$products.title'}
}
}
])
我有 packSubtotal,我还想获得一个 taxableSubtotal(如果可能,在同一个聚合中 isTaxable 为 true 的 product.price 的总和。
我知道我可以对 isTaxable 进行匹配进行单独聚合,然后获取该小计并手动将它们相加,但我很好奇是否有一种方法可以在一个聚合中完成所有操作。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework