Search code examples
node.jsmongodbmongooselocal-database

Undefined function error for cursor.toArray() with locally hosted database


I am getting the error:

"TypeError: undefined is not a function" ..for toArray() in the code below.

// Require mongo db user model
var User = require("./models/user.js"); 

.
.
.

// list of members page ====================================================
// protected page
app.get("/members", isLoggedIn, function(req, res) {

    // get array list of usernames
    var pttCursor = User.find( { } , { firstname: 1, lastname: 1, _id: 0 } );
    var membersArray = pttCursor.toArray(function(err, docs){});

    res.render("members.ejs", {
        user : req.user, // get user out of session and pass to template
        members : membersArray
    });
});

I want the /members page to have access to an array of usernames.

edit: I have also tried "cursor.map()" .. I get the same error

// get array list of usernames
var pttCursor = User.find( { } , { firstname: 1, lastname: 1, _id: 0 } );
var membersArray = pttCursor.map(function(pttDoc){
    return pttDoc.firstname + pttDoc.lastname;
});

Solution

  • .find method from model returns Query object not Cursor.

    To execute query, use .exec() method on pttCursor.

    Also all async methods should be handled with callbacks.

    var pttCursor = User.find( { } , { firstname: 1, lastname: 1, _id: 0 } )
        .exec(function(err, membersArray){
            res.render("members.ejs", {
                user : req.user, // get user out of session and pass to template
                members : membersArray
            });
        });