MongoDB聚合:按日期分组后展开$

时间:2018-03-19 16:44:39

标签: mongodb mongoose aggregation-framework

我有这个购买模式:

{
    purchase_date: 2018-03-11 00:00:00.000,
    total_cost: 400,
    items: [
        {
            title: 'Pringles',
            price: 200,
            quantity: 2,
            category: 'Snacks'
        }
    ]
}

我要做的是首先按照日期对购买进行分组:

{$group: {
            _id: {
                date: $purchase_date,
                items: '$items'
            }
}}

但是,现在我要做的是将每天的购买分组为items[].category,并计算当天每个类别的花费。我有一天能够做到这一点,但是当我按日期对每次购买进行分组时,我再也无法$unwind items

我尝试传递路径$items但根本找不到它。如果我在两种情况下都尝试使用$_id.$items_id.$items,则会收到错误消息,指出它不是$unwind的有效路径。

1 个答案:

答案 0 :(得分:1)

您可以使用purchase_dataitems.category作为分组_id,但您需要在items之前使用$ unwind,然后您可以添加另一个$ group来获取所有内容每天的团体

db.col.aggregate([
    { $unwind: "$items" },
    {
        $group: {
            _id: {
                purchase_date: "$purchase_date",
                category: "$items.category",
            },
            total: { $sum: { $multiply: [ "$items.price", "$items.quantity" ] } }
        }
    },
    {
        $group: {
            _id: "$_id.purchase_date",
            categories: { $push: { name: "$_id.category", total: "$total" } }
        }
    }
])