根据MongoDB's documentation调用 save
将创建一个新文档,或者如果提供了 _id
则更新现有文档。 Mongoose 的文档是 less detailed并且不涉及是否插入或更新。
我正在尝试使用 Mongoose 的 save
功能更新文档,但我不断收到错误消息:
{"error":{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: staging.participants.$_id _ dup key: { : ObjectId('5515a34ed65073ec234b5c5f') }"}}
Mongoose 的 save
函数是像 MongoDB 的 save
函数一样执行 upsert 还是只是执行插入?
最佳答案
save
是插入还是更新的定义是 isNew
标志,您可以 see here .
当文档实例从 find
查询(或其任何变体)返回时,此标志会自动设置为 false
。如果您手动实例化文档,请尝试在保存之前将此标志设置为 false:
var instance = new Model({ '_id': '...', field: '...' });
instance.isNew = false;
instance.save(function(err) { /* ... */ });
还有一个init
函数,用于初始化文档和automatically set isNew
to false
:
var data = { '_id': '...', field: '...' };
var instance = new Model();
instance.init(data, {}, function(err) {
instance.save(function(err) { /* ... */ })
});
关于mongodb - Mongoose/MongoDB 在保存时抛出重复键错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475118/