MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Model.find().toArray() prétendant ne pas avoir la méthode .toArray()

Le toArray la fonction existe sur le Cursor class du pilote Native MongoDB NodeJS (référence). Le find La méthode dans MongooseJS renvoie une Query objet (référence). Il existe plusieurs façons d'effectuer des recherches et de renvoyer des résultats.

Comme il n'y a pas d'appels synchrones dans le pilote NodeJS pour MongoDB, vous devrez utiliser un modèle asynchrone dans tous les cas. Les exemples pour MongoDB, qui sont souvent en JavaScript utilisant la console MongoDB, impliquent que le pilote natif prend également en charge des fonctionnalités similaires, ce qu'il ne fait pas.

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);
          });
};

Ensuite, pour l'appeler :

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('/');
});

Vous pouvez également faire un tri sur un champ (comme une date de publication de blog par exemple) :

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

Le code ci-dessus serait trié par ordre décroissant en fonction d'un champ appelé postDate (syntaxe alternative :sort({ postDate: -1}) .