Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MongoDB聚合中使用$push合并对象_Mongodb_Aggregation Framework - Fatal编程技术网

在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"
          }
        ]
      }
    }
  }
}