在MongoDB聚合中使用$push合并对象
我有以下汇总:在MongoDB聚合中使用$push合并对象,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下汇总: [ { $unwind: "$stocks" }, { $sort: { date: 1 } }, { $group: { _id: { userId: "$userId", productId: "$stocks.productId" }, stock: { $last: "$stocks" }, lastDate: { $last: "$date" } } }, { $group: {
[
{ $unwind: "$stocks" },
{ $sort: { date: 1 } },
{ $group:
{
_id: { userId: "$userId", productId: "$stocks.productId" },
stock: { $last: "$stocks" },
lastDate: { $last: "$date" }
}
},
{
$group: {
_id: "$_id.userId",
stocks: { $push: { stock: "$stock", lastDate: "$lastDate" } }
}
}
]
它生成以下文档:
{
"_id": "5e75f498359fc8159d5b6075",
"stocks": [
{
"stock": {
"productId": "5e75eae1359fc8159d5b6073",
"quantity": 20
},
"lastDate": "2020-03-21T16:21:14.008Z"
},
{
"stock": {
"productId": "5e75eaea359fc8159d5b6074",
"quantity": 1
},
"lastDate": "2020-03-21T15:59:31.615Z"
}
]
}
它运行良好,但我希望库存中的每个项目都是“1级”深度:
你能帮我更新我的聚合以达到期望的输出吗
编辑:以下是一个示例文档:
{
"_id": ObjectId("5e7604e8645bb946e7eba6b5"),
"date": "2020-03-21T12:13:28.355Z",
"userId": ObjectId("5e75d985359fc8159d5b6072"),
"stocks": [
{
"productId": ObjectId("5e75eae1359fc8159d5b6073"),
"quantity": 5
},
{
"productId": ObjectId("5e75eaea359fc8159d5b6074"),
"quantity": 5
}
]
}
将上一个
$group
更改为:
{
$group: {
_id: "$_id.userId",
stocks: {
$push: {
$mergeObjects: [
"$stock",
{
"lastDate": "$lastDate"
}
]
}
}
}
}
您能提供一个示例输入文档吗?请在末尾尝试另一个
{$unwind:“$stocks”}
。@WernfriedDomscheit我添加了一个示例文档。不幸的是,它不能与另一个$unwind
一起使用。
{
$group: {
_id: "$_id.userId",
stocks: {
$push: {
$mergeObjects: [
"$stock",
{
"lastDate": "$lastDate"
}
]
}
}
}
}