以下是我的收藏结构:
["First returned", "second returned", 123]
该集合的更新代码为:
plugins: [
new webpack.ProvidePlugin({
$: path.resolve(__dirname, "libs/jquery-3.2.1.min.js")
})
]
我想更新“模拟”对象的一个(或多个)值。我可能有也可能没有“模拟”集合的全部价值。这意味着我大部分时间只有{
"_id" : ObjectId("59c9e021af4886c9149a28c7"),
"userkey" : "r1Et2ZNdW",
"devicekey" : "12345",
"analog" : {
"4" : 458,
"6" : 448,
"7" : 100
},
"__v" : 0
}
或DeviceModel.update({_id : device.id}, {$set : {"analog" : analog}}, function(err, doc){
if(err) throw err;
console.log("Device switches updated");
});
等等。如果我在上面的更新代码中使用它,它可以工作。但问题是对象中的其余项目将被删除。也就是说,“模拟”对象将变为{"7" : 200}
。我应该对更新代码进行哪些更改以保留Object的其余部分。还是我需要改变我的整个逻辑?
答案 0 :(得分:2)
您需要首先将analog
变量对象展平为另一个具有使用点表示法的属性的对象。这使 $set
运算符能够正确更新点符号中表示的嵌入字段,而无需更新/删除/影响其他字段。
所以,在你的例子中你可以解决这个问题:
let setObject = {};
Object.keys(analog).forEach(function (key) {
setObject[`analog.${key}`] = analog[key];
});
DeviceModel.update(
{ '_id': device.id },
{ '$set': setObject },
function(err, doc) {
if(err) throw err;
console.log("Device switches updated");
}
);