#mongodb #mongoose #mongoose-schema
Вопрос:
У меня есть коллекция тестовых документов объемом 300 тыс. Я хочу обновить всех людей firstName
и lastName
быть в нижнем регистре.
const person = new Schema({
firstName: { type: String},
lastName: { type: String }
})
Я добавил lowecase:true
в схему, но как мне обновить существующие документы?
Я пытался:
CaseFile
.find({ })
.cursor()
.eachAsync(async function (doc) {
await doc.save()
})
но я получаю ошибку
Error: Collection method find is synchronous
Я тоже пытался :
CaseFile
.find({ })
.then(docs => {
docs.forEach(doc => {
doc.save()
})
})
что приводит к ошибке:
JavaScript heap out of memory
версия бд v5.0.2
«мангуст»: «^6.0.5»,
спасибо Вернфриду Домшайту за решение pipeline 🏄 :
CaseFile.updateMany({}, [
{
$set:
{
firstName: { $toLower: '$firstName' },
lastName: { $toLower: '$lastName' }
}
}]
)
.then(res => res)
Ответ №1:
С какой стати «повторять», то есть строка за строкой?
Используйте конвейер агрегации:
db.CaseFile.updateMany({}, [
{ $set:
firstName: { $toLower: "$firstName" },
lastName: { $toLower: "$lastName" }
}
])