MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Model.find().toArray() alegando não ter o método .toArray()


O toArray função existe no Cursor class do driver Native MongoDB NodeJS (referência). O find método em MongooseJS retorna uma Query objeto (referência). Existem algumas maneiras de fazer pesquisas e retornar resultados.

Como não há chamadas síncronas no driver NodeJS para MongoDB, você precisará usar um padrão assíncrono em todos os casos. Exemplos para o MongoDB, que geralmente estão em JavaScript usando o console do MongoDB, implicam que o driver nativo também oferece suporte a funcionalidades semelhantes, o que não acontece.
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);
          });
};

Então, para chamá-lo:
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('/');
});

Você também pode classificar em um campo (como uma data de postagem no blog, por exemplo):
Blog.find().where("author", username).
   sort("-postDate").exec(/* your callback function */);

O código acima seria classificado em ordem decrescente com base em um campo chamado postDate (sintaxe alternativa:sort({ postDate: -1}) .