Как использовать UpdateMany в mongoose

#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('/');
          }
        }
      });
  }
  

для меня это сработало нормально, надеюсь, это поможет 🙂