Mongoose/MongoDB在保存时抛出重复键错误?

Abe*_*ler 19 mongoose mongodb

根据MongoDB的文档,调用save将创建一个新文档,或者如果_id提供则更新现有文档.Mongoose的文档不太详细,也没有考虑是否会插入或更新.

我试图使用Mongoose的save函数来更新文档,但我一直收到错误:

{"error":{"name":"MongoError","code":11000,"err":"insertDocument ::由:: 11000 E11000引起的重复键错误索引:staging.participants.$ _ id _ dup key:{ :ObjectId('5515a34ed65073ec234b5c5f')}"}}

Mongoose的save函数是否像MongoDB的save函数一样执行upup,还是执行插入?

vic*_*ohl 25

定义是save插入还是更新的内容是isNew标志,如此处所示.

falsefind查询(或其任何变体)返回文档实例时,此标志自动设置为.如果要手动实例化文档,请在保存之前尝试将此标志设置为false:

var instance = new Model({ '_id': '...', field: '...' });
instance.isNew = false;
instance.save(function(err) { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

还有一个init函数,它将初始化文档并自动设置isNewfalse:

var data = { '_id': '...', field: '...' };
var instance = new Model();
instance.init(data, {}, function(err) {
    instance.save(function(err) { /* ... */ })
});
Run Code Online (Sandbox Code Playgroud)