mongodb - 仅当字段存在于 MongoDB 中时才更新该字段

标签 mongodb mongodb-query upsert

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

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

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

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

最佳答案

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

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

关于mongodb - 仅当字段存在于 MongoDB 中时才更新该字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599523/

相关文章:

sql - 仅当值不存在时才从 SELECT 插入到表中

mongodb - Golang MGO - 插入或更新未按预期工作

mongodb - golang mongo 延迟 session

mongodb - 聚合查询以获取不包含空白 (""的数据或空值无法正常工作

sql-server - 检查记录是否存在,如果是,则“更新”,如果不是,则“插入”

mongodb - 如何在聚合中匹配和分组具有最大值的数组元素

java - 如何在 Java 中运行动态 mongo 查询

java - 如何在spring-boot中使用具有多个数据库的Mongodb单实例

mongodb - 如何使用 MongoDB 存储 ejabberd 消息?

javascript - 将图像路径保存到mongodb的方式是什么?