MongoError:不允许在_id上使用Mod

tom*_*456 15 mongoose mongodb node.js express

关于此问题有一些问题,但我似乎无法找到目前似乎已接受的解决方案.

我正在尝试更新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' }
Run Code Online (Sandbox Code Playgroud)

我用来进行更新的代码是:

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});
  })
});
Run Code Online (Sandbox Code Playgroud)

因为我有一个名为"short_id"的"字段"我认为这可能是一个问题,因为字段名称中有一个"_id"部分所以我将其更改为"short"但仍然没有运气 - 我得到了相同的错误.我后来发现它认为我正在尝试改变_id字段,但我不知道为什么.

tom*_*456 28

问题是因为我正在使用short(这是唯一的)来查找文档并对其进行更新,并将_id其作为更新的值发送,这是无法完成的.

因此,在发送params之前,我_id从对象中删除了它.

delete the_object._id
Run Code Online (Sandbox Code Playgroud)

现在一切正常.


Kod*_*der 7

如果您使用lodash,以下代码可以帮助..

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