Ошибка MongoDB: невозможно использовать повторяющиеся записи с пределом = 0 - PullRequest
0 голосов
/ 11 мая 2018

В настоящее время я работаю над своим первым API-интерфейсом node.js rest Express, mongodb (облако атласа) и mongoose, когда я пытаюсь сделать запрос .remove, я получаю эту ошибку:

{
"error": {
    "name": "MongoError",
    "message": "Cannot use (or request) retryable writes with limit=0",
    "driver": true,
    "index": 0,
    "code": 72,
    "errmsg": "Cannot use (or request) retryable writes with limit=0"
}

Это мой запрос:

router.delete('/:productId', (req, res, next) => {
const id = req.params.productId;
Product.remove({ _id: id })
    .exec()
    .then(result => {
        res.status(200).json(result);
    })
    .catch(err => {
        console.log(err);
        res.status(500).json({
            error: err
        })
    }); ;
});

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

retryWrites=true - хорошая вещь, для обхода этой несовместимости нужно использовать findOneAndRemove вместо remove (похоже, вы используете мангуста)

0 голосов
/ 05 июня 2018

Функция findOneAndRemove () будет работать более соответствующим образом, поскольку она специфична для метода фильтрации, передаваемого в функцию .findOneAndRemove (filter, options) для удаления отфильтрованного объекта.Тем не менее, если процесс удаления прерывается соединением, retryRewrites = true попытается выполнить функцию при подключении.

Дополнительная информация здесь

При использовании retryRewrites, установленного в true, велит MongoDB повторить тот же процесс еще раз, что фактически может помочь предотвратить сбой соединений с базой данных и работать правильно, поэтому рекомендуется включить его.

Дополнительная информация здесь

Если вы используете Mongoose 5 ^ и MongoDB 3.6, ваш код лучше написать так:

mongoose.connect('mongodb.....mongodb.net/test?retryWrites=true', (err) => {
if(err){
    console.log("Could not connect to MongoDB (DATA CENTER) ");
    }else{
        console.log("DATA CENTER - Connected")
    }
});// CONNECTING TO MONGODB v. 3.6

router.delete('/:productId', (req, res, next) => {
const id = req.params.productId;
Product.findOneAndRemove({ _id: id })//updated function from .remove()
    .exec()
    .then(result => {
        res.status(200).json({
       message: "Product Removed Successfuly"
     });
    })
    .catch(err => {
        console.log(err);
        res.status(500).json({
            error: err
        })
    }); ;
});
0 голосов
/ 18 мая 2018

Я просто изменил истину на ложь в retryWrites=true, и это сработало. Это хороший подход? Или есть лучший способ решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...