当前位置 : 主页 > 网页制作 > Nodejs >

node.js – populate的聚合查询

来源:互联网 收集:自由互联 发布时间:2021-06-16
我想使用MongoDB聚合来填充评论中的用户.我可以轻松地使用它来使用$lookup运算符填充createdBy. 我的问题是有一种方法可以使用$each运算符聚合或类似的东西来填充评论中的用户? 我尝试
我想使用MongoDB聚合来填充评论中的用户.我可以轻松地使用它来使用$lookup运算符填充createdBy.

我的问题是有一种方法可以使用$each运算符聚合或类似的东西来填充评论中的用户?

我尝试使用Mongo 3.2,但在某处我读到它会成为3.4中类似的新功能吗?
我想逃避使用$unwind和$groups(我成功地做了)和类似的事情,以便查询不会成为意大利面条代码.

用户:

{
    "_id" : ObjectId("582c31d4afd9252c8515a88b"),
    "fullName": "test1"
},
{
    "_id" : ObjectId("582c3db0afd9252c8515a88d"),
    "fullName": "test2"
}

和帖子:

{
    "_id" : ObjectId("5829cac7e9c0994d3db718f8"),
    "imgUrl": "images/test.jpg",
    "createdBy": ObjectId("582c31d4afd9252c8515a88b"),
    "comments": [
        {
            "_id" : ObjectId("5829cab8e9c0994d3db718f7"),
            "content": "blabla",
            "user": ObjectId("582c31d4afd9252c8515a88b")
        }
    ]
}

预期产量:

{
    "_id" : ObjectId("5829cac7e9c0994d3db718f8"),
    "imgUrl": "images/test.jpg",
    "createdBy": ObjectId("582c31d4afd9252c8515a88b"),
    "comments": [
        {
            "_id" : ObjectId("5829cab8e9c0994d3db718f7"),
            "content": "blabla",
            "user": {
                        "_id" : ObjectId("582c31d4afd9252c8515a88b"),
                        "fullName": "test1"
                    }
        }
    ]
}
如果你想使用mongodb的聚合功能,那么你可以使用下面的解决方案.

db.getCollection('posts').aggregate([
    {"$unwind":{"path":"$comments","preserveNullAndEmptyArrays":true}},
    { $lookup:
            {
                from: 'users',
                localField: 'comments.user',
                foreignField:'_id',
                as: 'comments.user'
            }
    },
    {"$unwind":{"path":"$comments.user","preserveNullAndEmptyArrays":true}},
    {
            $group : {
                _id : "$_id",
                comments : {$push : "$comments"},
                imgUrl : {$first : "$imgUrl"},
                createdBy : {$first : "$createdBy"}
            }
    }

])

确保使用$lookup选项具有3.2.8或更高版本的mongodb

网友评论