MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Model.find().toArray() behauptet, keine .toArray() Methode zu haben

Das toArray Funktion existiert auf dem Cursor -Klasse aus dem nativen MongoDB-NodeJS-Treiber (Referenz). Der find -Methode in MongooseJS gibt eine Query zurück Objekt (Referenz). Es gibt einige Möglichkeiten, wie Sie Suchen durchführen und Ergebnisse zurückgeben können.

Da es im NodeJS-Treiber für MongoDB keine synchronen Aufrufe gibt, müssen Sie in allen Fällen ein asynchrones Muster verwenden. Beispiele für MongoDB, die häufig in JavaScript unter Verwendung der MongoDB-Konsole vorliegen, implizieren, dass der native Treiber auch ähnliche Funktionen unterstützt, was er nicht tut.

var userBlogs = function(username, callback) {
    Blog.find().where("author", username).
          exec(function(err, blogs) {
             // docs contains an array of MongooseJS Documents
             // so you can return that...
             // reverse does an in-place modification, so there's no reason
             // to assign to something else ...
             blogs.reverse();
             callback(err, blogs);
          });
};

Dann, um es zu nennen:

userBlogs(req.user.username, function(err, blogs) {
    if (err) { 
       /* panic! there was an error fetching the list of blogs */
       return;
    }
    // do something with the blogs here ...
    res.redirect('/');
});

Sie können auch nach einem Feld sortieren (z. B. nach dem Datum eines Blogbeitrags):

Blog.find().where("author", username).
   sort("-postDate").exec(/* your callback function */);

Der obige Code würde basierend auf einem Feld namens postDate in absteigender Reihenfolge sortieren (alternative Syntax:sort({ postDate: -1}) .