此代碼使用一個循環來對$unset
「value」數組中所有嵌入文檔的「checked」屬性,然後$set
當條件評估爲true時使用該屬性。
但是,當條件爲真時,更新塊無法通過設置選中的「已檢查」來更新嵌入的文檔,我知道因爲meteor:PRIMARY> db.radioOptions.find({}).pretty();
在前後給出了相同的結果。數組中嵌入文檔的集合更新屬性
我在做什麼錯?以及如何解決它?由於
meteor:PRIMARY> db.radioOptions.find({}).pretty();
{
\t "_id" : "jXQcsXtedQYotKQXG",
\t "name" : "optionType",
\t "value" : [
\t \t {
\t \t \t "name" : "1stOption",
\t \t \t "caption" : "1st Option"
\t \t },
\t \t {
\t \t \t "name" : "2ndOption",
\t \t \t "caption" : "2nd Option"
\t \t }
\t ]
}
var doc = RadioOptions.findOne({name: obj.name});
if (typeof doc != 'undefined') {
doc.value.forEach(function (embdoc) {
console.log(embdoc);
RadioOptions.update(
{name: obj.name, 'value.name': obj.value},
{$unset: {'value.$.checked': ""}}
);
if (embdoc.name == obj.value) {
console.log(obj.name + " " + obj.value); //obj.value = 1stOption for example
RadioOptions.update(
{name: obj.name, 'value.name': obj.value}, //obj.name = "optionType"
{$set: {'value.$.checked': "checked"}}
);
}
})
}
如果你已經有內存中的文檔(你已經完成了一個findOne),爲什麼不按照需要修改'value'字段,然後'設置'整個事情而不是做幾十個更新?這不是批評,我只是想知道這是否是我錯過的問題的一個參數。 –