仅更新存在于 MongoDB 中的字段

Update a field only if it exists in MongoDB

我在 MongoDB 的 testcol 集合中有一个这样的文档:

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

我想更新文档中的字段 yyy,如果找到该字段则更新它,如果找不到该字段则什么都不做。

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

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

If upsert is true and no document matches the query criteria, update() inserts a single document. The update creates the new document. If upsert is true and there are documents that match the query criteria, update() performs an update.

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

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