首页 > 解决方案 > 如何更改和显示 mongoDB 文档中数组中的特定字段?

问题描述

如何更改和显示 mongoDB 文档中数组中的特定字段?我有一个这样的领域:

   "mainField_e": {
       "routesArr_e": [
           {
               "eField_a": {
                   "field_a1": 8197,
                   "field_a2": "a string"
               },
               "field_b": "b string"
           }, ..
       ]
   }

..我想要这个:

   "routesArr_e": [
       {
           "field_a1": 8197,
           "field_a2": "a string",
           "field_b": "b string"
       }, ..
   ]

我尝试了以下命令:

   db.coll.aggregate([
       {
           $addFields: { 
               "routesArr_e.field_a1": "$mainField_e.routesArr_e.eField_a.field_a1",
               "routesArr_e.field_a2": "$mainField_e.routesArr_e.eField_a.field_a2",
               "routesArr_e.field_b": "$mainField_e.routesArr_e.field_b"
           }
       }, {
           $project: {
               "routesArr_e": 1
           }
       }
   ]).pretty();

但是,这会将各个字段放入输出中:

   "routesArr_e": {
       "field_a1": [8197, 6873, ..],
       "field_a2": ["a string", "different string", ..],
       "field_b": ["b string", "another string", ..]
   }

..而不是保留routesArr_e为带有字段的数组

我真的需要一些指导,因为我已经尝试了多种组合,$addFields$project无法做到这一点。非常感谢

标签: mongodbaggregation-framework

解决方案


您可以使用$map来获得所需的输出。

db.coll.aggregate([{
  $project: {
    _id: false, // if you want to remove _id
    routesArr_e: {
      $map: {
        input: "$mainField_e.routesArr_e",
        in: {
          field_a1: "$$this.eField_a.field_a1",
          field_a2: "$$this.eField_a.field_a2",
          field_b: "$$this.field_b"
        }
      }
    }
  }
}])

蒙戈游乐场


推荐阅读