我正在研究一个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
}
}
是否有一种方法可以像这样更新对象中的字段以使代码保持简单,还是我必须为每个单独的字段写出更新语句?
答案 0 :(得分:1)
当您尝试更新嵌套字段时,应使用dot notation构建路径。试试:
let fieldPath = 'analysis.' + field; // for instance "analysis.interest_rate"
db.collection.update(id, {
$set: {
fieldPath: value
}
});
否则,您只是替换现有的analysis
对象