JS / Пн goose - Изменить поле модели в схеме и в существующих документах. - PullRequest
0 голосов
/ 24 января 2020

В прошлом я создал схему mon goose с определенным полем, которое я хочу удалить или, скорее, преобразовать в массив.

Экземпляр исходной версии выглядит примерно так:

{ item: 'My awesome item' } // not showing other fields to save space

Который я хочу изменить на что-то вроде этого:

{ items: [ { name: 'My awesome item' } ] }

Я изменил поле в схеме на массив указанного выше формата. Теперь в моей базе данных все еще есть старые документы, в которых есть поле элемента, и я хочу преобразовать их следующим образом:

const models = await MyModel.find().exec()
for (const model of models) {
    if (model.item) {
        model.items = [ { name: model.item } ]
        model.item = undefined
        await model.save()
    }
}

Теперь странная вещь, печатая мои модели, я вижу, что документы, которые я получаю через find() действительно есть поле item. Однако mon goose уже пытался упаковать ее в новую схему, поэтому полученная мной модель выглядит следующим образом:

{ item: 'My awesome item', items: [] }

Следовательно, она уже создала поле items и все еще имеет старую item поле. Моя проблема сейчас в том, что, упаковав ее в скорректированную схему, я не смогу получить доступ к существующему полю item. model.item - это undefined, хотя при печати всего объекта model он показывает.

Кто-нибудь может помочь, как решить эту проблему?

...