Meteor:更新对象嵌套两个深层数组

时间:2017-12-04 15:07:53

标签: mongodb meteor meteor-collections

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

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

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

1 个答案:

答案 0 :(得分:2)

您只能将$运算符用于单级数组。不支持使用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