我正在寻求帮助。
我有一个名为'business'的集合,我有这样的对象:
[{
"_id": ObjectId("5aefa97166763d28fc984c7a"),
"name": "Business 1",
"boxes": [
{
"_id": ObjectId("5ac6bb69f3c36e17f0d34bd2")
}
]
}]
还有另一个名为box的集合,其中包含以下对象:
[{
_id: ObjectId("5ac6bb69f3c36e17f0d34bd2"),
name:"Box1",
color:"blue"
}]
这里的想法是,有些企业拥有盒子,我希望将两个收藏品分开。
那就是说,我想找回这个结果:
[{
"_id": ObjectId("5aefa97166763d28fc984c7a"),
"name": "Business 1",
"boxes": [{
_id: ObjectId("5ac6bb69f3c36e17f0d34bd2"),
name:"Box1",
color:"blue"
}]
}]
但我得到了这个结果:
[{
"_id": ObjectId("5aefa97166763d28fc984c7a"),
"name": "Business 1",
"boxes": [
{
"_id": ObjectId("5ac6bb69f3c36e17f0d34bd2")
}
]
}]
使用$ lookup,如下所示:
db.db('database').collection("business").aggregate({
$lookup:{
from: "boxes",
localField: "_id",
foreignField: "_id",
as: "box"
},
"$unwind": "$boxes"
}).toArray(function(err, result) {
if (err) throw err;
res.send(result);
db.close();
res.end();
});
我做错了什么?
谢谢大家!
答案 0 :(得分:1)
这应该有帮助
db.business.aggregate([{$lookup:{from: "boxes", localField: "boxes._id", foreignField: "_id", as: "box" }},{"$project":{"_id":1,"name":1,"boxes":"$box"}}])
查找创建一个数组“box”,其中包含来自boxes集合的所有匹配文档。管道中的下一个阶段$ project,从新文档中选择_id和name,并将box数组重命名为box。
答案 1 :(得分:0)
如果您有多个objectId并需要在一个数组框中:
Ex: "boxes": [
{
"_id": ObjectId("5ac6bb69f3c36e17f0d34bd2")
},
{
"_id": ObjectId("5ac6bb69f3c36e17f0d34bd3")
}
]
然后你需要做组
查询:
db.getCollection('business').aggregate([
{"$unwind": "$boxes"} ,
{$lookup:{
from: "boxes",
localField: "boxes._id",
foreignField: "_id",
as: "box"
}},
{
$group: {
_id: '$_id',
name: { $first: '$name' },
boxes: {
$push: {
_id: '$boxes._id',
name: '$boxes.name'
color: '$boxes.color'
}
}
}
}
])