无法使用 MongoDB Atlas 中的查找聚合两个集合

Unable to aggregate two collections using lookup in MongoDB Atlas

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

{
    "_id" : "wJNEiSYwBd5ozGtLX",
    "orderId" : 52713,
    "createdAt" : ISODate("2020-01-31T04:34:13.790Z"),
    "status" : "closed",
    "orders" : [ 
        {
            "_id" : "ziPzwLuZrz9MNkaRT",
            "productId" : 10290,
            "quantity" : 2
        }
    ]
}

我有一个看起来像这样的产品系列

{
    "_id" : "238cwwLkZa6gKNN86",
    "productId" : 10290,
    "title" : "Product Title",
    "price" : 9.9
}

我正在尝试将价格信息合并到订单信息中。

类似于:

{
    "_id" : "wJNEiSYwBd5ozGtLX",
    "orderId" : 52713,
    "createdAt" : ISODate("2020-01-31T04:34:13.790Z"),
    "status" : "closed",
    "orders" : [ 
        {
            "_id" : "ziPzwLuZrz9MNkaRT",
            "productId" : 10290,
            "quantity" : 2,
            "price": 9.9
        }
    ]
}

如果我像这样在 MongoDB Atlas 仪表板上尝试 $lookup 命令:

{
  from: 'products',
  localField: 'orders.productId',
  foreignField: 'productId',
  as: 'priceInfo' 
}

聚合输出是(不是我想要的):

{
    "_id" : "wJNEiSYwBd5ozGtLX",
    "orderId" : 52713,
    "createdAt" : ISODate("2020-01-31T04:34:13.790Z"),
    "status" : "closed",
    "orders" : [ 
        {
            "_id" : "ziPzwLuZrz9MNkaRT",
            "productId" : 10290,
        }
    ],
    "priceInfo": [
        {
            "_id" : "238cwwLkZa6gKNN86",
            "productId" : 10290,
            "title" : "Product Title",
            "price" : 9.9
        }
    ] 
}

我不需要单独的 priceInfo 数组。如果我将产品详细信息合并到“订单”数组中,那将是最好的。实现所需输出的聚合查找语法应该是什么?

演示 - https://mongoplayground.net/p/bLqcN7tauWU

阅读 - $lookup $unwind $first $set $push $group

db.orders.aggregate([
  { $unwind: "$orders" }, // break array of orders into individual documents
  {
    $lookup: { // join
      "from": "products",
      "localField": "orders.productId",
      "foreignField": "productId",
      "as": "products"
    }
  },
  {
    $set: {
      "orders.price": { "$arrayElemAt": [ "$products.price", 0 ] } // set the price
    }
  },
  {
    $group: { // group records back 
      _id: "$_id",
      createdAt: { $first: "$createdAt" },
      status: { $first: "$status" },
      orderId: { $first: "$orderId" },
      orders: { $push: "$orders" }
    }
  }
])