mongodb更新现有字段而不会覆盖

时间:2020-11-07 16:19:57

标签: mongodb mongodb-query

{
   questions: {
      q1: "",
   }
}

更新后的结果:

{
   questions: {
      q1: "",
      q2: ""
   }
}

我想在问题中添加q2,而不要覆盖其中已经存在的内容(q1)。

我发现的一种解决方案是获取整个文档,然后在后端对其进行修改,然后发送整个文档以替换当前文档。但这似乎效率很低,因为我在文档中还有其他字段。

是否有一个查询可以更有效地执行?我看了一下mongodb文档,似乎没有找到能做到这一点的query

1 个答案:

答案 0 :(得分:0)

正如turivishal所说,您可以像this一样使用$set

但是您也可以通过以下方式使用$addFields

db.collection.aggregate([
  {
    "$match": {
      "questions.q1": "q1"
    }
  },
  {
    "$addFields": {
      "questions.q2": "q2"
    }
  }
])

示例here

此外,请在您说Cannot create field 'q2' in element {questions: "q1"}的地方阅读您的评论。看来您的原始架构与数据库中的架构不同。

您的模式表明questions是具有字段q1的对象。但是您的错误是questions是字段,q1是值。