我有两个名为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 }
])
任何人都可以帮我解决这个问题...
答案 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);
});