Агрегация MongoDB для изменения ключа на основе значения в каждом объекте

#mongodb #nosql #aggregation-framework

Вопрос:

Есть ли запрос агрегации, доступный для преобразования следующего: после раскрутки я планирую изменить ключ на основе значения внутри каждого объекта и добавить его тоже имеет—(тип)

 {
    "rows": [
        {
            "type": "aaa",
            "values": [
                1,
                2,
                3
            ]
        },
        {
            "type": "bbb",
            "values": [
                4,
                5,
                6
            ]
        }
    ]
}

 

Для

 {
    "hasaaa": {
        "type": "aaa",
        "values": [
            1,
            2,
            3
        ]
    },
    "hasbbb": {
        "type": "bbb",
        "values": [
            4,
            5,
            6
        ]
    }
}
 

Ответ №1:

  • $map для повторения цикла rows массива
  • $concat чтобы подготовить пользовательскую строку ключа
  • вернуть ключ-значение с карты
  • $arrayToObject преобразование массива ключ-значение в объект
 db.collection.aggregate([
  {
    $project: {
      rows: {
        $arrayToObject: {
          $map: {
            input: "$rows",
            in: {
              k: { $concat: ["has", "$this.type"] },
              v: "$this"
            }
          }
        }
      }
    }
  }
])
 

Игровая площадка