首页 > 解决方案 > 在 MongoDB 聚合中添加数组元素的字段

问题描述

我有一组包含对象数组的文档:

db.collection.insert({
    arr: [
      { id: 1, text: 'foo' },
      { id: 2, text: 'bar' },
    ]
});

有没有办法提取/投影/添加该数组中一个元素的字段?例如,text数组的第一个元素的字段。我在 MongoPlayground 中尝试了$ addFields各种变体,

db.collection.aggregate([
  {
      $addFields: { text1: '$arr.text' }
  }
]);

但没有任何东西只产生一个text领域。充其量,我得到了两者,使用上面的语法,但我只想要一个字段,以便在其上使用 $type,因为它似乎$typecan't inspect array elements

标签: mongodbaggregation-framework

解决方案


您可以使用$let$arrayElemAt来定义临时变量,然后引用它来获取text字段:

db.collection.aggregate([
    {
        $addFields: {
            text1: {
                $let: {
                    vars: {
                        first: {
                            $arrayElemAt: [ "$arr", 0 ]
                        }
                    },
                    in: "$$first.text"
                }
            }
        }
    }
])

推荐阅读