В прошлом я создал схему 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
он показывает.
Кто-нибудь может помочь, как решить эту проблему?