MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Model.find().toArray() afferma di non avere il metodo .toArray()

Il toArray esiste una funzione sul Cursor classe dal driver Native MongoDB NodeJS (riferimento). Il find metodo in MongooseJS restituisce una Query oggetto (riferimento). Esistono diversi modi per eseguire ricerche e restituire risultati.

Poiché non ci sono chiamate sincrone nel driver NodeJS per MongoDB, dovrai utilizzare un modello asincrono in tutti i casi. Esempi per MongoDB, che sono spesso in JavaScript usando la MongoDB Console, implicano che anche il driver nativo supporta funzionalità simili, ma non è così.

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

Quindi, per chiamarlo:

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

Puoi anche eseguire l'ordinamento su un campo (ad esempio la data di un post di un blog):

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

Il codice sopra verrebbe ordinato in ordine decrescente in base a un campo chiamato postDate (sintassi alternativa:sort({ postDate: -1}) .