Mongo $set 在更新时删除对象中的其他字段

Kri*_*ris 6 mongodb

我正在处理一个 mongo 语句,用于将值添加和更新到我文档中的对象中。

这是我目前的声明。字段和值的变化取决于传入的内容:

 db.collection.update(id, {
   $set: {
     analysis : {[field]: value}
    }
  });
Run Code Online (Sandbox Code Playgroud)

这是文档外观的示例(分析中可能有 20 多个字段)

{
 _id
 analysis:{
  interest_rate: 22
  sales_cost: 4000
  value: 300
 }
}
Run Code Online (Sandbox Code Playgroud)

问题是每次我更新对象时,除了我更新的字段之外,所有字段都被删除。

因此,如果

字段 = 利率

和新的

值 = 33

我的文档最终看起来像这样,分析中的所有其他字段都将被删除:

 {
   _id
   analysis:{
    interest_rate: 33
   }
  }
Run Code Online (Sandbox Code Playgroud)

有没有办法更新像这样的对象中的字段以保持代码简单,或者我是否必须为每个单独的字段写出更新语句?

mic*_*ckl 6

当您尝试更新嵌套字段时,您应该使用点表示法来构建路径。尝试:

let fieldPath = 'analysis.' + field; // for instance "analysis.interest_rate"

db.collection.update(id, {
    $set: {
        fieldPath: value
    }
});
Run Code Online (Sandbox Code Playgroud)

否则,您只是替换现有analysis对象。