【问题标题】:MongoDB: insert on duplicate key updateMongoDB:插入重复键更新
【发布时间】:2012-04-21 00:44:37
【问题描述】:

如何在一个 [atomic] 语句中使用 Mongo 做到这一点:

insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?

该语句第一次执行时会设置X值,之后只会更新Y值。

只有 MyUniqueKey 是唯一键的一部分,应该查找重复项。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    来自

    $setOnInsert

    我会称它为“MyCollection”而不是“mytable”。 您可以执行以下操作:

    db.mycollection.update(
       { MyUniqueKey: "?" },
       {  
          $set: {"y": "?"},
          $setOnInsert: {
              MyUniqueKey: "?",
               "x": "?",
       },
       { upsert: true }
    )
    

    基本上 $set 总是运行,除非文档不存在。然后 $setOnInsert 将运行。

    【讨论】:

      【解决方案2】:

      您正在寻找Update 命令上的upsert option。这里的文档应该足够了。

      【讨论】:

      • 能否举个例子。我已经尝试了许多选项组合,但我无法选择要在插入时设置但在更新时被排除的字段。
      • 我喜欢只在第一次插入时设置一个字段,但在更新时保持不变。
      • 您必须使 Y 成为更新的 query 部分的一部分,而不是 update 部分的一部分。
      【解决方案3】:

      我在 mongodb 用户组上问过这个问题,答案是不可能的,这是一个开放的issue

      【讨论】:

      • 此问题已在 MongoDB 2.4 中关闭,您现在可以使用$setOnInsert
      猜你喜欢
      • 2013-08-02
      • 2021-03-28
      • 2011-02-12
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2016-09-17
      相关资源
      最近更新 更多