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

Posted

技术标签:

【中文标题】如何在MongoDB中将数组转换为对象【英文标题】:how to convert array to object in MongoDB 【发布时间】:2019-03-29 23:30:29 【问题描述】:

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

                "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
                    ,.................]

我想把它转换成给定的对象:

                     "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
                    ,.................

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

我使用的是 Mongo 3.4 版。

【问题讨论】:

这是一个不可能的设置...不知道你的意思。每当你有一个东西的集合时,它必须被包装在一个数组中......? 你的预期结果不是一个有效的对象。 【参考方案1】:

我找到了解决办法。


            $project: 
                "content": 
                    "$arrayToObject": 
                        "$map": 
                            "input": "$content",
                            "as": "el",
                            "in": 
                                "k": "$$el._id",
                                "v": "$$el"
                            
                        
                    
                

【讨论】:

【参考方案2】:

我猜第二个不是正确的对象格式,你需要一个键值对 make object

 "content": 
                   "key1":
                        "_id": "refbooks",
                        "total": 189,
                        "published": 189,
                        "created": 0,
                        "approved": 0,
                        "rejected": 0,
                        "sent_for_approval": 0
                    ,
                   "key2":
                        "_id": "weblinks",
                        "total": 1911,
                        "published": 1899,
                        "created": 10,
                        "approved": 2,
                        "rejected": 0,
                        "sent_for_approval": 0
                    

【讨论】:

是的,就像那样 @LabeebShareef 我猜你已经找到了答案,还有另一种方法可以使用 underscore.js underscorejs.org/#groupBy

以上是关于如何在MongoDB中将数组转换为对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中将对象数组转换为字符串数组

如何在javascript中将嵌套对象转换为对象数组? [关闭]

如何在 C# 中将对象数组向上转换为另一种类型的对象数组?

如何在php中将对象数组转换为键值对

如何在 Javascript 中将表单数组转换为 JSON? (对象数组)?

PowerShell:如何在 PowerShell 中将数组对象转换为字符串?