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

时间:2015-04-06 16:18:47

标签: mongodb mongoose

根据MongoDB's documentation,对save的调用将创建新文档,或在提供_id时更新现有文档。 Mongoose的文档是less detailed,不会介绍它是否会插入或更新。

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

  

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

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

1 个答案:

答案 0 :(得分:24)

save标记isNewfalse标记的内容,find标记为see here

当从var instance = new Model({ '_id': '...', field: '...' }); instance.isNew = false; instance.save(function(err) { /* ... */ }); 查询(或其任何变体)返回文档实例时,此标志自动设置为init。如果要手动实例化文档,请在保存之前尝试将此标志设置为false:

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

还有一个{{1}}函数,用于初始化文档和automatically set isNew to false

{{1}}