【问题标题】:Update a field only if it exists in MongoDB仅当字段存在于 MongoDB 中时才更新该字段
【发布时间】:2017-01-11 19:50:11
【问题描述】:

我在 MongoDB 的 testcol 集合中有一个文档,如下所示:

{
_id:111,
"xxx":"aaa",
"yyy":"bbb"
}

我想更新文档中的字段 yyy,如果找到该字段则更新它,如果未找到该字段则不执行任何操作。

当我运行像 db.testcol.update({_id:0},{$set:{"zzz":"ccc"}},{upsert: false}) 这样的 mongo db update 命令时。我故意在更新命令中将该字段指定为“zzz”,以便它不应该做任何事情。但是当我运行上面的更新命令时,它在上面的文档中插入了新的字段“zzz”,尽管 upsert 被赋予了错误。我知道 upsert 不会/将插入 document 而不是 field ,但是由于我是 MongoDB 新手,所以我只是试一试。谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: mongodb mongodb-query upsert


    【解决方案1】:

    您可以在查询中使用$exists 运算符,仅在存在yyy 字段时匹配文档:

    db.testcol.update({_id: 111, yyy: {$exists: true}}, {$set: {yyy: 'ccc'}})
    

    【讨论】:

      【解决方案2】:

      您使用 upsert 错误。请参阅 mongo 的文档here

      如果 upsert 为真且没有文档符合查询条件,则 update() 插入单个文档。更新会创建新文档。如果 upsert 为真,并且有符合查询条件的文档, update() 执行更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-19
        • 1970-01-01
        • 2019-08-09
        • 1970-01-01
        相关资源
        最近更新 更多