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

时间:2018-11-07 19:45:11

标签: mongodb

我正在研究一个mongo语句,用于向文档中的对象添加和更新值。

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

 db.collection.update(id, {
   $set: {
     analysis : {[field]: value}
    }
  });

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

{
 _id
 analysis:{
  interest_rate: 22
  sales_cost: 4000
  value: 300
 }
}

问题在于,每次我更新对象时,除我更新的字段外,所有其他字段都将被删除。

如果

  

field = interest_rate

和新的

  

值= 33

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

 {
   _id
   analysis:{
    interest_rate: 33
   }
  }

是否有一种方法可以像这样更新对象中的字段以使代码保持简单,还是我必须为每个单独的字段写出更新语句?

1 个答案:

答案 0 :(得分:1)

当您尝试更新嵌套字段时,应使用dot notation构建路径。试试:

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

db.collection.update(id, {
    $set: {
        fieldPath: value
    }
});

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