collection update property of embedded document in array

Viewed 128

This code uses a loop to $unset the "checked" property of all embedded documents in the "value" array, then $set the one when a condition evaluates to true.
But when the condition is true, the update block failed to update the embedded document by setting a checked: "checked", I know that because meteor:PRIMARY> db.radioOptions.find({}).pretty(); gives the same results before and after.

What am I doing wrong? and how to fix it? Thanks

meteor:PRIMARY> db.radioOptions.find({}).pretty();
{
 "_id" : "jXQcsXtedQYotKQXG",
 "name" : "optionType",
 "value" : [
  {
   "name" : "1stOption",
   "caption" : "1st Option"
  },
  {
   "name" : "2ndOption",
   "caption" : "2nd Option"
  }
 ]
}


      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"}}
            );

          }
        })
      }

1 Answers
Related