流星:更新对象嵌套两个数组深

Meteor: Update object nested two arrays deep

我有一个名为 fields 的集合,它是 JSON 个对象的数组。这些对象可以有 options 这是另一个 JSON 对象数组。我正在尝试通过 optionId 更新其中一个选项。我试过了,但没用。

Projects.update({
  'fields.options._id': optionId
}, {
  $set: {
    `fields.$.options.$.title`: title
  }
}

这确实找到了正确的项目文档,但没有更新它。

您只能对单级数组使用 $ 运算符。不支持使用 array1.$.array2.$.key

但是,如果您知道数组中要更新的元素的确切索引,则可以这样更新:

Projects.update({
  'fields.options._id': optionId
}, {
  $set: {
    `fields.0.options.1.title`: title
  }
}

这是一种更新方式:

Projects.find({"fields.options._id":optionId}).forEach(function(record) {  
    var match = false;
    // iterate fields array
    for(var i=0; i< record.fields.length; i++){
      // iterate options array 
      for(var j=0; j<record.fields[i].options.length; j++){

        if(record.fields[i].options[j]._id == optionsID){
           record.fields[i].options[j].title = title;
           match = true;
           // break;
       }

      }
    }


    if (match === true) Projects.update( { 'fields.options._id': optionId }, record );

});

Source