我有这个购买模式:
{
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
的有效路径。
答案 0 :(得分:1)
您可以使用purchase_data
和items.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" } }
}
}
])