【发布时间】:2018-10-21 07:48:41
【问题描述】:
我目前正在使用 express、mongodb (atlas cloud) 和 mongoose 开发我的第一个 node.js rest api,当我尝试发出 .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
})
}); ;
});
【问题讨论】:
-
这很奇怪。您实际上是否在
mongoose.connect()上的连接字符串或其他选项上传递了任何特殊内容?我很确定 Atlas 集群都升级到了 MongoDB 3.6(这是可重试写入的来源),但实际上不应该有任何“默认情况下”打开此功能。因此,如果您正在做一些“特别”的事情,那么好奇的人会想知道。 -
你能在你的问题中实际显示变量的值吗?此外,您发出
connect()的代码也将很有用。以防万一。 -
我看得很清楚,是的,这就是问题所在,我从 atlas mongoDB 复制的 url 已经在其中 retryWrites=true 最后,问题解决了!非常感谢!
-
哎哟!可能不应该在控制台的默认“建议”URL 中包含它。我可能会将其作为支持请求,因为我看到其他人在做与您完全相同的事情。
-
嗨@GonzaloRodriguez,你能确认你的MongoDB Atlas部署版本吗?另外,您使用的猫鼬版本是 v5 及以上版本,还是 v4.11 及以上版本?我刚刚尝试重现此问题,MongoDB Atlas 部署 v3.4 不会在 URL 中显示
retryWrites=true,尽管 v3.6 部署会。
标签: node.js mongodb express mongoose