如何在MongoDB中将数组转换为对象

Lab*_*eef 0 arrays object mongoose mongodb aggregation-framework

我有一个对象数组,其中包含未知数量的数组元素:

               { "content": [
                    {
                        "_id": "refbooks",
                        "total": 189,
                        "published": 189,
                        "created": 0,
                        "approved": 0,
                        "rejected": 0,
                        "sent_for_approval": 0
                    },
                    {
                        "_id": "weblinks",
                        "total": 1911,
                        "published": 1899,
                        "created": 10,
                        "approved": 2,
                        "rejected": 0,
                        "sent_for_approval": 0
                    },.................]}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为给定的对象:

                    { "content": {
                    {
                        "_id": "refbooks",
                        "total": 189,
                        "published": 189,
                        "created": 0,
                        "approved": 0,
                        "rejected": 0,
                        "sent_for_approval": 0
                    },
                    {
                        "_id": "weblinks",
                        "total": 1911,
                        "published": 1899,
                        "created": 10,
                        "approved": 2,
                        "rejected": 0,
                        "sent_for_approval": 0
                    },.................}}
Run Code Online (Sandbox Code Playgroud)

我尝试使用 $unwind,但没有得到所需的输出。如何在 MongoDB 中实现这个内部聚合管道?

我正在使用 Mongo 3.4 版。

Lab*_*eef 9

我找到了解决方案。

{
            $project: {
                "content": {
                    "$arrayToObject": {
                        "$map": {
                            "input": "$content",
                            "as": "el",
                            "in": {
                                "k": "$$el._id",
                                "v": "$$el"
                            }
                        }
                    }
                }
}
Run Code Online (Sandbox Code Playgroud)