2017-12-04 6 views
0

fields이라는 키가있는 컬렉션이 JSON 객체의 배열입니다. 이러한 객체는 JSON 객체의 또 다른 배열 인 options을 가질 수 있습니다. 옵션 중 하나를 optionId으로 업데이트하려고합니다. 나는 이것을 시도했지만 효과가 없다.Meteor : 중첩 된 두 개의 배열을 중첩하여 객체 업데이트

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

올바른 프로젝트 문서를 찾지 만 업데이트하지 않습니다.

+0

샘플 문서를 컬렉션에 표시 하시겠습니까? – blueren

+1

무언가를 변경하기 위해 문서에 깊이 도달해야한다면 스키마를 다시 생각해야합니다. –

답변

2

단일 레벨 배열에만 $ 연산자를 사용할 수 있습니다. array1.$.array2.$.key의 사용은 지원되지 않습니다. 당신이 배열 내에 업데이트 할 요소의 정확한 인덱스를 알고있는 경우

그러나, 당신과 같이 업데이트 할 수 있습니다

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

}); 
:

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

이 업데이트하는 방법 중 하나입니다

Source