如何在 $project 阶段将一个值的数组转换为对象?

Posted

技术标签:

【中文标题】如何在 $project 阶段将一个值的数组转换为对象?【英文标题】:How to transform an array of one value into an object in $project stage? 【发布时间】:2022-01-22 02:44:39 【问题描述】:

使用 mongodb,我想在一个文档中转换一个数组,如下所示:

activities: ["start": start_date, "end": end_date, value:"4332A"]

变成一个对象,像这样(仅将值字段投影为“活动”的值):

activities: "4332A"

我曾尝试在 $project 阶段使用 $arrayToObject,但结果并不是我真正想要的:

    db.companies.aggregate([
        $project: 
            $map: 
                'input': '$activities',
                'as': 'item',
                'in': 
                    'k': 'activities',
                    'v': '$$item.value'
                
            
        
    ])

输出是:

"activities": "activities": "4332A"

【问题讨论】:

数组中是否总是只有一个值? 是的,之前应用的预处理将“活动”字段转换为只有一个 start_date、end_date 和 value 的数组。 什么是“预处理”...? 【参考方案1】:

假设数组中总是只有一个结果(如您所说),您可以使用arrayElemAt,如下所示:

db.collection.aggregate([
  
    $addFields: 
      activities: 
        "$arrayElemAt": [
          "$activities.value",
          0
        ]
      
    
  
])

Mongo Playground

【讨论】:

以上是关于如何在 $project 阶段将一个值的数组转换为对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有可选值的情况下将字典数组快速转换为json字符串[重复]

将对象数组转换为二维数组

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

对象值的Javascript数组转换为多维数组

如何在 Go 中将 JSON 对象数组转换为具有默认值的结构数组?

如何将熊猫系列转换为索引和值的元组