Задать вопрос
@sadsdasdasdsadsadsadsadsa
WEB developer

MongoDB можно ли в агрегации подставить переменную?

Есть коллекция Languages
[
    {
        "code": "ru",
        "name": {
            "ru":  "Русский",
            "en": "Russian"
        }
    },
    {
        "code": "en",
        "name": {
            "ru":  "Английский",
            "en": "English"
        }
    }
]


Нужно выбрать языки что бы получился объект
[
    {
        "code": "ru",
        "name": ''Русский'
    },
    {
        "code": "en",
        "name": "English"
    }
]


const $project = {
      name: {
        $switch: {
          branches: [
            {
              case: { $eq: [ '$code', 'en' ] },
              then: '$name.en'
            },
            {
              case: { $eq: [ '$code', 'ru' ] },
              then: '$name.ru'
            }
          ]
        }
      },
      code: '$code'
    }

const pipeline = [ { $project } ]
const result = await LanguagesModel.aggregate(pipeline)


Проблема в том что при добавлении нового языка придется дописывать switch, а напрашивается вариант с подставлением code в name, только не знаю возможно ли это
  • Вопрос задан
  • 76 просмотров
Подписаться 1 Средний 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
Grapeoff
@Grapeoff
В чём концепция...?
class Language {
     code: 'ru' | 'en';

     @Transform(prop => ({code: prop.obj.code, name: prop.value[prop.obj.code]}))
     name: { en: string, ru: string }
}

const languages = await LanguagesModel.find();

const result = plainToInstance(Language, languages)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы