MongoError:对_id的Mod不允许

在这里有几个问题,但我似乎无法find一个似乎是目前被接受的方法的解决scheme。

我试图更新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”部分的问题,所以我把它改为“短”,但仍然没有运气 – 我得到同样的错误。 我后来发现,它认为我正在试图改变_id领域,但我不知道为什么。

问题是因为我使用short (这是唯一的)来查找文档并更新它,并且_id作为值被更新,无法完成。

因此,在发送参数之前,我从对象中删除_id

 delete the_object._id 

现在一切正常。

如果您正在使用lodash,下面的代码可以帮助..

 var id = update._id; var update = _.omit(update,'_id'); mongo.mCustomers.findOneAndUpdate({_id:id},update,callback); 

我有在MongoDB 3.x上本地传递的testing,但是我在运行旧版本(2.4.x)的CircleCI(持续集成服务)中遇到了这个错误。

原来安装新版本修复了我遇到的问题。

这个问题在MongoDB版本3.6中不存在,但在我们的生产服务器上使用2.4版本就成了一个问题。