Как использовать UpdateMany в мангусте - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь использовать 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 Ответ

1 голос
/ 21 апреля 2019

Вы пытаетесь вызвать updateMany() функцию со слишком большим количеством параметров

Activity.updateMany({}, { $set: { color: "#ffffff" }},{upsert: true}, {multi: true}, (err,doc) => { ... })
На основе документов mongoose все параметры должны передаваться одним объектом, например:
Activity.updateMany({}, { $set: { color: "#ffffff" }},{ upsert: true, limit: 20, skip: 50 }, (err,doc) => { ... })

Кроме того, с функцией updateMany() вам не нужно использовать опцию multi: true.Это имеет смысл только при использовании update() func.


Попробуйте этот код:

    Activity.updateMany({}, { $set: { color: "#ffffff" }}, { upsert: true }, (err, data) => { 
        if (err) {
            res.status(400).send(err)
        }
        res.send(data)
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...