如何在mongodb中使用聚合合并两个对象?

时间:2020-10-27 00:19:43

标签: mongodb aggregation-framework

我在合并对象时遇到麻烦,我有一个工厂模式,其中包含一个汽车属性,其中包含每辆汽车的引用,我想将工厂与最近注册的汽车合并。我有以下数据。

 "Factory": {
            _id: ""
            "factories" : [
               {
                 "Adress" : "...",
                 "name": "Factory A"
                 "car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
               },
               {
                 "Adress" : "...",
                 "name": "Factory B"
                 "car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
               }
              
            ],

        },

汽车收藏:

"Car" : 
      _id: ObjectId("5f974ac1200b1aa93fee248b")
      "color" : "...",
      "feature": "..."
},
    

我期望的输出:

[
  {
   "Factory A": {
      "Adress" : "...",
      "name": "Factory A"
      "cars": {
          _id: ObjectId("5f974ac1200b1aa93fee248b")
          "color" : "...",
          "feature": "..."
         }
    },
    "Factory B": {
      "Adress" : "...",
      "name": "Factory B"
      "car": {
          _id: ObjectId("5f974ac1200b1aa93fee248b")
          "color" : "...",
          "feature": "..."
         }
    },
  }
]

我得到的输出:

"Factory A": {
  {
    "Adress" : "...",
    "name": "Factory A",
    "car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
  },
  "car": {
    _id: ObjectId("5f974ac1200b1aa93fee248b")
    "color" : "...",
      "feature": "..."
  }
}
"Factory B": {
  {
    "Adress" : "...",
    "name": "Factory B",
    "car": [ ObjectId("5f974ac1200b1aa93fee248b") ]
  },
  "car": {
    _id: ObjectId("5f974ac1200b1aa93fee248b")
    "color" : "...",
      "feature": "..."
  }
}

这是我的操作

db.getCollection('factory').aggregate([
{ $match: { "_id": ObjectId("5f9740f38591d84413600db0") } },
{ $unwind: "$factories"},
{ $group: { _id: null, allFactories: { $addToSet: "$factories"} } },
{ $unwind: "$allFactories" },
{
    $lookup: {
      from: "cars",
      localField: "allFactories.car",
      foreignField: "_id",
      as: "cars"
    }
},
{ $sort: { "cars._id": -1 } },
{ $unwind: "$cars" },
{ $group: {_id:"$allFactories.name", lastMatch: { $last: "$$ROOT"} }}

对这种方法有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试此查询。您将不得不对此稍微调整一下ObjectIds。我使用了字符串,因为文档在mongo操场上出错了。但是我认为这很简单。

0

Mongo Playground