Как размотать массив полей объекта в массив строк в том же поле в MongoDB

#arrays #mongodb #aggregation-framework

#массивы #mongodb #агрегация-фреймворк

Вопрос:

У меня следующая структура документа:

 {
    "user_id": "102",
    "roles": [{
        "name": "superuser"
    }, {
        "name": "admin"
    }, {
        "name": "account_admin"
    }]
}
 

И мне нужно перейти к следующему результату:

 {
    "user_id": "102290863723817866607",
    "roles": [
        0: "superuser",
        1: "gsuite_admin",
        2: "account_admin"
    ]
}
 

Я не совсем понимаю, как организовать конвейер агрегации, чтобы получить этот результат

Ответ №1:

Вы можете использовать a $project , объединенный с a $map , чтобы выбрать имя из объекта вашей роли:

 db.collection.aggregate([
  {
    "$project": {
      "roles": {
        "$map": {
          "input": "$roles",
          "as": "role",
          "in": "$role.name"
        }
      }
    }
  }
])