2016-06-12 7 views
2

Ich versuche, alle Daten aus einer Sammlung zu drucken und einige der Forschung hat die beste Art und Weise gezeigt, dass zu tun ist,fest, ob collection.forEach erfolgt

DB.collection('users').find({}).each((err, i) => { 
    console.log(i); 
}); 

Das ist sehr gut, aber ein console.log läuft nach dieser Schleife wird vorher drucken, und ich muss etwas ausführen, nachdem alle Elemente zurückgegeben werden.

Wenn ich stattdessen alle Dokumente gleichzeitig abrufen kann, würde das mein Problem lösen, andernfalls muss ich feststellen, wann diese Schleife abgeschlossen ist, und dann Code ausführen, um die Ergebnisse zu verarbeiten.

Antwort

1

Dies erforderte ein paar Rätsel, da die MongoDB-API nicht direkt auf erwartete Node-Konzepte abbildet.

Unabhängig, MongoDB die Suche Methode gibt eine cursor object zurück. Dieser Cursor-Objekt ist in der Tat each implementieren (wie auch andere hilfreiche Methoden wie toArray.)

Allerdings dauert die callbackzwei Parameter, nicht nur eine. [Edit: die Frage, verwendet nur ein Parameter in der Callback zu haben, ein Transkriptionsfehler von OP]

DB.collection('users').find({}).each((error, i) => { 
    console.log(i); 
}); 

Es ist Node Konvention, dass der erste Parameter eines Rückrufes ein Fehler Objekt sein, für die Fehlerbehandlung Zwecke. Die nächsten Parameter sind Ihre tatsächlichen Daten - in diesem Fall der Datensatz von Mongo.

+0

Ja, und ich mache das eigentlich, IDK, warum ich nicht in meinem Beispiel gegeben habe, aber das ist nicht das Problem, das ich habe, Das Problem, das ich habe, ist etwas ausgeführt, nachdem alle Ergebnisse zurückgegeben werden. Ich habe kein Problem, die Gegenstände zurückzugeben. –

+0

dann vielleicht ToArray anstelle von jedem verwenden? Es dauert ein Rückruf mit einem Fehler und ein Array von zurückgegebenen Datensätzen, anstelle von jedem Datensatz einzeln. – RyanWilcox

+1

Ja! Genau das habe ich gesucht, danke! –

Verwandte Themen