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

How to transform an array of one value into an object in $project stage?

使用 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"}}

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

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

Mongo Playground