mongodb复杂聚合嵌套条件groupby



我有一个订单集合,如下所示:

[
{
_id: ObjectID,
date: Date,
products: [
{
id: string,
quantity: number
},
{
id: string,
quantity: number
},
]
}
]

我需要聚合它们,这样我就可以使用product.id来确定每个日期(而不是时间(的每个id的数量

我得到的数据集看起来像这样:

[
{ 
date: "2021-01-1", 
products: {
// product_id: quantity
PRODUCT_ID_1: 4
PRODUCT_ID_2: 9
} 
}
]

关于我该怎么做有什么想法吗?

  • $dateToString将日期转换为特定的所需格式
  • $unwind解构products阵列
  • $group乘以iddate和总和quantity
  • $group只通过日期和构造键值格式的乘积数组
  • $arrayToObjectproducts数组转换为对象
db.collection.aggregate([
{
$addFields: {
date: {
$dateToString: {
date: "$date",
format: "%Y-%m-%d"
}
}
}
},
{ $unwind: "$products" },
{
$group: {
_id: {
date: "$date",
id: "$products.id"
},
quantity: { $sum: "$products.quantity" }
}
},
{
$group: {
_id: "$_id.date",
products: {
$push: {
k: "$_id.id",
v: "$quantity"
}
}
}
},
{
$project: {
products: { $arrayToObject: "$products" }
}
}
])

游乐场

最新更新