关于这方面有一些问题,但我似乎无法找到目前可接受的方法。
我试图更新MongoDB中的文档,并且我使用Mongoosejs来完成它。但是,我收到了这个错误:
{ [MongoError: Mod on _id not allowed]
name: 'MongoError',
lastErrorObject:
{ err: 'Mod on _id not allowed',
code: 10148,
n: 0,
connectionId: 35,
ok: 1 },
ok: 0,
errmsg: 'Mod on _id not allowed' }
我用来进行更新的代码是:
app.put('/task/:short', auth, function (req, res) {
Task.findOneAndUpdate({short:req.params.short}, req.body, function(err, task) {
if(err) console.log(err);
res.json(200, {content: task});
})
});
因为我有一个"字段"叫" short_id"我认为这可能是一个问题,因为有一个" _id"部分到字段名称,所以我将其更改为" short"但仍然没有运气 - 我得到同样的错误。我后来发现它认为我试图改变_id字段,但我不知道为什么。
答案 0 :(得分:28)
问题是因为我使用short
(这是唯一的)来查找文档并对其进行更新,_id
作为更新值发送而无法完成。
因此,在发送参数之前,我从对象中删除了_id
。
delete the_object._id
现在一切正常。
答案 1 :(得分:7)
如果您使用的是lodash,则以下代码可以提供帮助..
var id = update._id;
var update = _.omit(update,'_id');
mongo.mCustomers.findOneAndUpdate({_id:id},update,callback);
答案 2 :(得分:4)
我在MongoDB 3.x上本地传递了测试,但是我在CircleCI(一个持续集成服务)中遇到了这个错误,它运行旧版本(2.4.x)
原来安装了一个新版本解决了我遇到的问题。
答案 3 :(得分:0)
MongoDB版本3.6中不存在此问题,但在使用版本2.4的生产服务器上,这成为一个问题。