如何基于mongodb中的_id字段连接两个集合

时间:2018-01-08 06:05:21

标签: mongodb

我有两个名为orders和items的集合,如下所示。现在,我正在尝试基于_id字段加入这些集合。我们可以在这种情况下使用“$ lookup”运算符吗?或者是否有其他方法可以解决此问题。

db.orders.insert([
   { "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 },
   { "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 }
])


db.items.insert([
  { "_id" : 1, "item" : "almonds", description: "almond clusters", "instock" : 120 },
  { "_id" : 2, "item" : "bread", description: "raisin and nut bread", "instock" : 80 },
  { "_id" : 3, "item" : "pecans", description: "candied pecans", "instock" : 60 }
])

任何人都可以帮我解决这个问题...

2 个答案:

答案 0 :(得分:1)

请尝试以下代码:

db.orders.aggregate([
   {
     $lookup:
       {
         from: "items",
         localField: "_id",
         foreignField: "_id",
         as: "item"
       }
  },
  { $unwind: "$item" },
  {
    $project: {
        "_id": 1,
        "price": 1,
        "quantity": 1,
        "description": "$item.description",
        "instock": "$item.instock"
    }
  }
])

由于您知道将存在1对1关系,因此您可以展开$ lookup结果,以便每个订单只有一个嵌入项。然后,您可以投影结果以获得JSON的平面结构。这将为您提供以下形状的结果:

{
    "_id" : 1,
    "price" : 12,
    "quantity" : 2,
    "description" : "almond clusters",
    "instock" : 120
}

答案 1 :(得分:0)

试试这个。

db.orders.aggregate([
{ $lookup:
   {
     from: 'items',
     localField: '_id',
     foreignField: '_id',
     as: 'get_data'
   }
 } 

]).exec(function(err, res) {
if (err) throw err;
console.log(res);
});