0

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

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

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

4

1 回答 1

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

});

资源

于 2017-12-04T16:15:48.923 回答