Mongodb: 不是聚合的预期结果 ($lookup)

Mongodb: Not expected result from aggregate ($lookup)

我正在寻求帮助。

我有一个名为 'business' 的 collection,其中 objects 是这样的:

[{
    "_id": ObjectId("5aefa97166763d28fc984c7a"),
    "name": "Business 1",
    "boxes": [
        {
            "_id": ObjectId("5ac6bb69f3c36e17f0d34bd2")
        }
    ]
}]

还有另一个 collection 叫做盒子,它有 objects 像:

[{
    _id: ObjectId("5ac6bb69f3c36e17f0d34bd2"),
    name:"Box1",
    color:"blue"
}]

这里的想法是有些企业拥有盒子,我想将两者 collection 分开。

也就是说,我想检索这个结果:

[{
    "_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();
    });

我做错了什么?

谢谢大家!

这应该有帮助

db.business.aggregate([{$lookup:{from: "boxes", localField: "boxes._id", foreignField: "_id", as: "box" }},{"$project":{"_id":1,"name":1,"boxes":"$box"}}])

查找创建一个数组 "box",其中包含管道中 collection.The 下一阶段 $project 中的所有匹配文档,从新文档中选择 _id 和名称并重命名框数组到盒子。

如果您有多个 objectId 并且需要在一个数组 Boxes 中:

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'
                 } 
              }
       }
    }

])