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

Mongoose/MongoDB在保存时抛出重复密钥错误?,mongodb,mongoose,Mongodb,Mongoose,根据调用save将创建新文档,如果提供了\u id,则更新现有文档。Mongoose的文档是,也没有涉及它是否将插入或更新 我试图使用Mongoose的save功能来更新文档,但我不断收到错误: {“error”:{“name”:“MongoError”,“code”:11000,“err”:“insertDocument:: 原因::11000 E11000重复键错误索引: staging.participants.$\u id\u dup键:{: ObjectId('5515a34ed650

根据调用
save
将创建新文档,如果提供了
\u id
,则更新现有文档。Mongoose的文档是,也没有涉及它是否将插入或更新

我试图使用Mongoose的
save
功能来更新文档,但我不断收到错误:

{“error”:{“name”:“MongoError”,“code”:11000,“err”:“insertDocument:: 原因::11000 E11000重复键错误索引: staging.participants.$\u id\u dup键:{: ObjectId('5515a34ed65073ec234b5c5f')}


Mongoose的
save
功能是否像MongoDB的
save
功能一样执行upsert,还是只是执行插入?

定义
save
是插入还是更新的是
isNew
标志,正如您所能做的那样

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

var instance = new Model({ '_id': '...', field: '...' });
instance.isNew = false;
instance.save(function(err) { /* ... */ });
还有一个
init
函数,它将初始化文档并:

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