仅更新存在于 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'}})
我在 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'}})