0

다음과 같은 배열이 있습니다. 배열은 몇 가지 속성과 몇 개 이상의 객체로 구성된 배열입니다. 다른 배열을 가진 객체를 가진 배열을 통한 비동기 루프

var array = [ 
    { 
     prop1Name: 'Thing', 
     prop2ID: 1 
     propArray: [ 
      { 
       innerProp1Name: 'Name 1', 
       innerProp2ID: 1 
      }, 
      { 
       innerProp1Name: 'Name 2', 
       innerProp2ID: 2 
      }, 
     ] 
    }, 
    { 
     prop1Name: 'Thing 2', 
     prop2ID: 2 
     propArray: [ 
      { 
       innerProp1Name: 'Name 1', 
       innerProp2ID: 1 
      }, 
      { 
       innerProp1Name: 'Name 2', 
       innerProp2ID: 2 
      }, 
     ] 
    } 
] 

이제 내 목표는 Node.js를 API를 통해 데이터베이스에이를 삽입하는 것입니다. 나는 async.js로 물 들었다. 그러나 async.each()의 안에서 async.each()가 여기에가는 길인지에 관해 궁금하게 생각하고있다. 어쩌면 첫 번째 async.each()에 대한 반복기 함수 내부에서 정의 할 수 있습니다.

테이블에 propArray 내의 각 항목에 대한 외부 속성 ID가 필요합니다. PropArray는 추가 할 행을 제어합니다.

+0

... 작동하지 않는 부분과 시도한 부분은 무엇입니까? 이 사이트에는 배열과 객체를 반복하는 것에 대한 답이 많이 있습니다. –

답변

1

중첩 배열을 통한 루프 및 배열과 중첩 배열이 큰 경우 모든 항목에 대해 db insert가 매우 비쌉니다. db 드라이버를 사용하면 배열 삽입 (대부분 수행)을 할 수 있으므로 일반 for 루프를 사용하여 평평하게하는 것이 더 저렴하고 1 db insert를 수행 할 수 있습니다.

var array = [ ... ]; // your array 
var i, j, outLen, inLen, item, innerItem; 
var result = []; 

for (i = 0, outLen = array.length; i < outLen; i++) { 
    item = array[i]; 
    for (j = 0, inLen = item.propArray.length; j < inLen; j++) { 
    innerItem = item.propArray[j]; 
    result.push({ 
     prop1Name: item.prop1Name, 
     prop2ID: item.prop2ID, 
     innerProp1Name: innerItem.innerProp1Name, 
     innerProp2ID: innerItem.innerProp2ID 
    }); 
    } 
} 

db.collection.insert(result, ...); 

내부 배열의 오류 검사 및 존재하지 않습니다. 그렇게하고 싶을 수도 있습니다.

+0

Windows Azure 모바일 서비스 node.js api에서 이것이 가능하지 않다고 생각합니다. 이 포인터를 주셔서 감사합니다. 컬렉션 삽입물에 대한 리소스를 찾을 수 없습니다. – NicT

+0

컬렉션 삽입이 없으면 중첩 된 async.each()를 수행해야합니다. 또는 여전히 위의 방법을 사용하여 평평하게하고 async.each() 또는 async.eachSeries()를 사용하여 평행 대신 직렬로 처리해야하는 경우). – Ben

+0

내부 배열에 올바른 최상위 ID를 삽입하는 한 객체를 반복 할 때 문제가되지 않습니다. 나는 너의 굉장한 충고를 받아 들일 것이고, 정말 고마워! – NicT