【问题标题】:getting BulkWriteError: E11000 duplicate key error collection error when performing insertMany using upsert使用 upsert 执行 insertMany 时出现 BulkWriteError: E11000 duplicate key error collection error
【发布时间】:2020-09-02 02:31:21
【问题描述】:

所以我试图将多个文档添加到 mongo 集合中,所以我正在使用 insertMany 我的用例是,如果已经存在一个文档,那么它应该使用最新的文档进行更新,所以我正在使用 upsert,但我得到了BulkWriteError: E11000 重复键错误收集错误。下面是我正在尝试的代码

  dbo.collection("formulas").insertMany(documents, { upsert: true, safe: false  })

我的文档看起来像这样

[ { _id: 5ede7f3a471f7751ee27c828, 公式:'4yogesh', 公式别名:'FGAFyogesh', 表单组描述:空, 公式_sequence_id:2, selectedRulesetEvent: '', no_of_variables:1, productId: 'newProd12345', 产品版本:'1.0', 覆盖组:'FGA', 组织ID:'org34', userKey: 'org34admin', 表单组:'FGA', rulesetEventDropdown: '' } ]

由于我是 mongo 的新手,不确定到底出了什么问题,请有人帮忙。非常感谢任何想法或帮助。谢谢。

【问题讨论】:

    标签: node.js database mongodb mongoose nosql


    【解决方案1】:
    1. insertMany - 我没有看到 doc 中提到的这种受支持的 upsert

    2. 如果存在需要更新,可以使用updateMany。但听起来如果存在相同的 id,您需要更新。所以你需要准备UpdateOnestatements和upsert,并在bulkwrite中使用

    3. 关于错误 - 您正在尝试插入具有现有唯一键字段的文档。在这种情况下,它是_id

    【讨论】:

    • @@ Gibbs 您能否通过示例详细说明第二点。如果集合中不存在该文档,我想添加该文档,如果存在,则使用新文档更新整个现有文档。
    • 使用 upsert 更新将起作用。要更新不同条件的多文档,请使用更新的批量写入。
    • @@Gibbs 你能举个例子,因为我是 mongo 的新手
    • 当然。 Refer this 传递 _id 作为查找命令。更新为您传递的文件。正如您已经提到的那样,Upsert 选项。如果您想替换而不是更新,请在 mongo 中查找替换一个。
    • @@ Gibbs 我认为使用 upsert 进行更新应该可以完成工作,但不确定批量写入必须对此进行更多检查
    猜你喜欢
    • 2020-10-19
    • 2012-06-07
    • 2020-08-13
    • 2022-01-05
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多