2017-04-03 2 views
1
const collect = []; 
req.body.product.forEach(function(entry) { 
    mongoClient.connect(databaseServerUrl, function(err, db) { 
     let testCollection = db.collection('Tests'); 
     testCollection.find({Product: entry}).toArray((err, docs) => { 
      let waiting = docs.length; 
      docs.forEach(function (doc) { 
       collect.push(doc); 
       finish(); 
      }); 
      function finish() { 
       waiting--; 
       if (waiting === 0) { 
        res.send(collect); 
       } 
      } 
     }); 
     db.close(); 
    }); 
}); 

Dies ist nur das erste Set zurück. Wenn ich zum Beispiel zwei Knoten in meinem Array von req.body.product habe. Ich bekomme nur den ersten Satz zurück. Aber ich muss alles zurückbekommen, nicht nur aus einer Sammlung.res.send nach zwei forEach beendet die Ausführung

+0

Gibt es einen Grund, warum Sie nicht nur alle Ergebnisse in einer einzigen Abfrage erhalten, z. '.find ({$ oder: req.body.product.map (Eintrag => ({Produkt: Eintrag}))})'? –

+0

Perfekt. Ich mag das. Wenn du meine Frage beantwortet hättest. Ich würde dies als Antwort wählen. Vielen Dank! :) – mkteagle

+0

Ich habe eine Antwort gepostet. Bitte lassen Sie es mich wissen, wenn es für Sie funktioniert, da ich es nicht wirklich testen konnte (und ich bin nicht wirklich ein MongoDB-Benutzer). –

Antwort

1

Vielmehr lösen sollten zwei Abfragen als die Durchführung und die Ergebnisse in einem Array kombiniert, schlage ich vor, eine einzelne Abfrage durchführen, die alle Ergebnisse erhält, die in etwa so aussehen würde:

mongoClient.connect(databaseServerUrl, function(err, db) { 
    const query = { $or: req.body.product.map(Product => ({ Product })) }; 
    db.collection('Tests').find(query).toArray((err, docs) => { 
     // ...handle `err` here... 
     res.send(docs); 
     db.close(); 
    }); 
}); 

Bitte beachte, dass ich dies nicht getestet, da ich vor mir keine MongoDB-Datenbank.

+0

Das funktioniert !!! Obwohl ich die Suchabfrage mit einer Textsuchanweisung verknüpfe. – mkteagle

Verwandte Themen