#mongoose
#мангуст #mongoose
Вопрос:
Я пытаюсь использовать updateMany в Mongoose, чтобы сбросить значение по умолчанию. Тем не менее, он продолжает расти 500 Internal Server Error
. Где я скучаю?
Index.js
app.put('/reset-match', (req, res) => {
Activity.updateMany({}, { $set: { color: "#ffffff" }},{upsert: true}, {multi: true}, (err,doc) => {
if(err) {res.status(400).send(err)}
else res.status(205).send(doc)
});
});
Модель деятельности
const mongoose = require('mongoose');
const validator = require('validator');
const Activity = mongoose.model('activity', {
name: {
type: String,
required: true,
trim: true
},
icon: {
type: String,
required: true,
trim: true,
validate(value) {
if (!validator.isURL(value)) {
throw new Error('URL is invalid');
}
}
},
color: {
type: String,
default: '#fff'
}
})
module.exports = Activity;
```
I expect the syntax of UpdateMany which works!
Ответ №1:
Вы пытаетесь вызвать updateMany()
функцию со слишком большим количеством параметров
Activity.updateMany({}, { $set: { color: "#ffffff" }},{upsert: true}, {multi: true}, (ошибка, документ) => { ... })
Основываясь на документах mongoose, все параметры должны передаваться одним объектом, например:
Activity.updateMany({}, { $set: { color: "#ffffff" }},{ upsert: true, ограничение: 20, пропуск: 50 }, (ошибка, документ) => { ... })
Кроме того, с updateMany()
функцией вам не нужно использовать multi: true
option. Это имеет смысл только при использовании update()
функции.
Попробуйте этот код:
Activity.updateMany({}, { $set: { color: "#ffffff" }}, { upsert: true }, (ошибка, данные) => { if (ошибка) { res.status(400).send(ошибка) } res.send(данные) })
Ответ №2:
как упоминалось в документах mongoose, вот как мы это делаем:
db.collection.updateMany(condition, update, options, callback function)
итак, это пример, основанный на документах:
async update_documents (req,res) => {
// creating arguments
let conditions = {};
let update = {
$set : {
title : req.body.title,
description : req.body.description,
markdown : req.body.markdown
}
};
let options = { multi: true, upsert: true };
// update_many :)
await YourCollection.updateMany(
conditions, update, options,(err, doc) => {
console.log(req.body);
if(!err) {
res.redirect('/articles');
}
else {
if(err.name == "ValidationError"){
handleValidationError(err , req.body);
res.redirect('/new-post');
}else {
res.redirect('/');
}
}
});
}
для меня это сработало нормально, надеюсь, это поможет 🙂