我有一个订单集合,如下所示:
[
{
_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
乘以id
、date
和总和quantity
$group
只通过日期和构造键值格式的乘积数组$arrayToObject
将products
数组转换为对象
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" }
}
}
])
游乐场