MongoDB - 对分桶数据执行聚合
MongoDB - Perform aggregations on bucketed data
我有一组嵌套文档,分为属于单个业务 ID 的存储桶。
为了说明,以下表示与企业 n 的发票相关的文档。 1022个,其中10朵玫瑰,20个橙子,15个苹果:
sample_doc = {
'business_id': '32044',
'dt_op': Timestamp('2018-10-02 12:16:12'),
'transactions': [
{'Product name': 'Rose', "Quantity": 10},
{'Product name': 'Orange', "Quantity": 20},
{'Product name': 'Apple', "Quantity": 15}
]
}
我想获得每个产品 ('Product name') 在定义的 'business_id' 范围内的总销售额('Quantity' 的总和)。
我尝试使用 Compass 来:
# Stage 1: $match
{
business_id: "1022"
}
#Stage 2: $group
{
_id: "$transactions.Product name",
TotalSum: {
$sum: "transactions.Quantity"
}
}
但是返回了一个嵌套的文档列表,没有执行求和。
如何正确执行聚合管道以获得每个产品 ('Product name') 在定义的 'business_id' 内的销售总数('Quantity' 的总和)?
你非常接近,你所缺少的只是$group
阶段之前的一个$unwind:
db.collection.aggregate([
{
$match: {
business_id: "1022"
}
},
{
$unwind: "$transactions"
},
{
$group: {
_id: "$transactions.Product name",
TotalSum: {
$sum: "$transactions.Quantity"
}
}
}
])
我有一组嵌套文档,分为属于单个业务 ID 的存储桶。
为了说明,以下表示与企业 n 的发票相关的文档。 1022个,其中10朵玫瑰,20个橙子,15个苹果:
sample_doc = {
'business_id': '32044',
'dt_op': Timestamp('2018-10-02 12:16:12'),
'transactions': [
{'Product name': 'Rose', "Quantity": 10},
{'Product name': 'Orange', "Quantity": 20},
{'Product name': 'Apple', "Quantity": 15}
]
}
我想获得每个产品 ('Product name') 在定义的 'business_id' 范围内的总销售额('Quantity' 的总和)。
我尝试使用 Compass 来:
# Stage 1: $match
{
business_id: "1022"
}
#Stage 2: $group
{
_id: "$transactions.Product name",
TotalSum: {
$sum: "transactions.Quantity"
}
}
但是返回了一个嵌套的文档列表,没有执行求和。
如何正确执行聚合管道以获得每个产品 ('Product name') 在定义的 'business_id' 内的销售总数('Quantity' 的总和)?
你非常接近,你所缺少的只是$group
阶段之前的一个$unwind:
db.collection.aggregate([
{
$match: {
business_id: "1022"
}
},
{
$unwind: "$transactions"
},
{
$group: {
_id: "$transactions.Product name",
TotalSum: {
$sum: "$transactions.Quantity"
}
}
}
])