2017-10-21 48 views
0

J'ai la liste des ID de collection enfant et exécute une boucle for. Dans ce cas, j'essaie de trouver les données de la collection parent et de les insérer dans une autre collection. Exemple de code est donné ci-dessousNoeud Js Async pour la boucle et l'insertion de données dans mongo

for(let i=0; i<test.length; i++;){ 
db.collection('Parent').find({ "Id" : test[i].Id }).toArray(function(err, result){ 
    if(result.length > 0){ 
    db.collection('anotherCollection', function(err, collection){ 
     collection.insert({ 
     field1: test[i].field1, 
     field2: test[i].field2 
     }) 
    }) 
    } 
}) 
} 

lorsque je tente d'exécuter ce code boucle se rempli avant la collecte insert.So je dois insérer collection à chaque itération.

+0

J'avais utilisé "async.eachSeries" et résolu ce problème. –

Répondre

0

Vous pouvez essayer de le faire récursive si votre tableau de test n'est pas trop long

function doAsyncLoop(i, test) { 
    if (i < test.length) { 
     db.collection('Parent').find({ 
      "Id": test[i].Id 
     }).toArray(function(err, result) { 
      if (result.length > 0) { 
       db.collection('anotherCollection', function(err, collection) { 
        collection.insert({ 
         field1: test[i].field1, 
         field2: test[i].field2 
        }); 
        doAsyncLoop(i++, test); 
       }) 
      } else { 
       doAsyncLoop(i++, test); 
      } 
     }) 
    } 
} 
0

Vous pouvez le faire comme ça:

const data = db.collection('Parent').find({ "Id" : test[i].Id }).toArray(); 

db.collection('anotherCollection').insert(data); 

Insérer peut travailler directement avec les tableaux