【问题标题】:Mongoose/MongoDB throwing duplicate key error on save?Mongoose/MongoDB 在保存时抛出重复键错误?
【发布时间】:2015-06-11 01:51:50
【问题描述】:

根据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 还是只是执行插入?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    定义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) { /* ... */ })
    });
    

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2013-08-03
      • 2018-10-12
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2020-09-29
      相关资源
      最近更新 更多