Mongodb嵌套$ grouping和$ sum?

时间:2016-10-28 08:40:30

标签: mongodb pymongo

我是MongoDB的新手,如果我错过了文档中的内容,请原谅我。我的收藏是这样的:

{
"_id" : ObjectId("57553e7015e4117a4343c18c"),
"BuyingPrice" : 55.5,
"Quantity" : NumberLong(1),,
"Brand" : "Ranamina",
"Amount" : 79.99,
"Profit" : 24.49,
"ProductId" : NumberLong(55319),}

在计算每个品牌的总金额后,我想看看每个品牌有多少产品。

我想看结果

{"Quantity": 1982,
 "Amount": 155,
 "Number_of_product" :12,
 "_id":{"Brand": "Ranamina"}
}

这是我的代码:

collection_test.aggregate([
        {
            '$group': {
                '_id': {
                    'Brand': '$Brand',
                },
                'Amount': {'$sum': '$Amount'},
                'product': {'$addToSet': '$ProductId'},
                'Amount_sum': {'$addToSet': '$Amount'},
            },
        },
        {'$group': {
            '_id': {'Brand': '$_id.Brand', 'ProductId': '$product'},
        }
        },
        {
            '$project': {'count': {'$size': '$_id.ProductId'}, 
            'Groups': '$_id.Groups', '_id': 0, 'Amount_sum':1,
                         }}
    ])

我在组方法中使用了组,但是我无法访问总金额和总利润。有没有办法访问这些?

1 个答案:

答案 0 :(得分:1)

这个怎么样?:

collection_test.aggregate([
{
    '$group': {
        '_id': {
            'Brand': '$Brand',
        },
        'Amount': {'$sum': '$Amount'},
        'Quantity': {'$sum': '$Quantity'},
        'product': {'$addToSet': '$ProductId'},
    },
},
{
    '$project': {
        'Quantity': True,
        'Amount': True,
        'Number_of_product': {'$size': '$product'}
    }
}])

你绝对不需要两个“$ group”阶段。