mongodb 复杂聚合嵌套条件groupby
mongodb complex aggregation nested conditional 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
乘以 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" }
}
}
])
我有一个订单集合,看起来像这样:
[
{
_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" }
}
}
])