MongoError:不允许在_id上使用Mod

时间:2014-06-08 07:33:27

标签: node.js mongodb express mongoose

关于这方面有一些问题,但我似乎无法找到目前可接受的方法。

我试图更新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字段,但我不知道为什么。

4 个答案:

答案 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的生产服务器上,这成为一个问题。