首页 文章

仅在MongoDB中存在时才更新字段

提问于
浏览
1

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

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

我想在文档中更新字段yyy,如果找到该字段然后更新它,如果找不到该字段,则不要做任何事情 .

当我运行我的mongo db update命令时,如 db.testcol.update({_id:0},{$set:{"zzz":"ccc"}},{upsert: false}) . 我故意在更新命令中将字段设为"zzz",这样它就不会做任何事情 . 但是当我运行上面的更新命令时,它在上面的文档中插入了新字段"zzz",尽管upsert被赋予了false . 我知道upsert将不会/将插入文档而不是字段,但由于我是MongoDB的新手,我只是试一试 . 谁能告诉我如何处理这个问题?

2 回答

  • 4

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

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

    你正在使用upsert错误 . 请参阅mongo的文档here

    如果upsert为true且没有文档与查询条件匹配,则update()会插入单个文档 . 更新将创建新文档 . 如果upsert为true且存在与查询条件匹配的文档,则update()会执行更新 .

相关问题