我正在阅读docs,但无法找到办法进行“双重”更新。
首先是集合:
meteor:PRIMARY> db.radioOptions.find({}).pretty();
{
"_id" : "n8DsDzsPL8JTRFEQ8",
"name" : "optionType",
"value" : [
{
"name" : "1stOption",
"caption" : "1st Option",
"checked" : true <-------- run code added this property
},
{
"name" : "2ndOption",
"caption" : "2nd Option",
"checked" : true <-------- run code added this property
}
]
}
这是运行的代码,它添加了标记的属性。 credit
RadioOptions.update(
{name: obj.name, 'value.name': obj.value},
{$set: {'value.$.checked': true}}
);
但我还想将其他嵌入文档设置为false或删除其属性checked:true
,以便只有一个嵌入文档,其checked字段设置为true或checked。
我失败的尝试:暴力
RadioOptions.update(
{name: obj.name, 'value.name': obj.value},
{$set: {'value.$.checked': true}, $set: {$ne: {'value.$.checked': false}}}
);
怎么能这样做?我可以在一次更新方法中执行此操作吗?
编辑阅读建议重复的链接后。
我的更新代码失败,因为更新行正在使用checked:false
更新第一个文档,而第二个文档更新checked:true
无条件评估的条件,已经过验证可以正确评估。
var doc = RadioOptions.findOne({name: obj.name});
if (typeof doc != 'undefined') {
doc.value.forEach(function (embdoc) {
// how to update so that to use $unet the "checked" property of all embedded documents in the value array?
if (embdoc.name == obj.value) {
RadioOptions.update(
{name: obj.name, 'value.name': obj.value},
{$set: {'value.$.checked': true}}
);
}
})
}