Convert Mongoose docs to json Convert Mongoose docs to json mongoose mongoose

Convert Mongoose docs to json


You may also try mongoosejs's lean() :

UserModel.find().lean().exec(function (err, users) {    return res.end(JSON.stringify(users));}


Late answer but you can also try this when defining your schema.

/** * toJSON implementation */schema.options.toJSON = {    transform: function(doc, ret, options) {        ret.id = ret._id;        delete ret._id;        delete ret.__v;        return ret;    }};

Note that ret is the JSON'ed object, and it's not an instance of the mongoose model. You'll operate on it right on object hashes, without getters/setters.

And then:

Model    .findById(modelId)    .exec(function (dbErr, modelDoc){         if(dbErr) return handleErr(dbErr);         return res.send(modelDoc.toJSON(), 200);     });

Edit: Feb 2015

Because I didn't provide a solution to the missing toJSON (or toObject) method(s) I will explain the difference between my usage example and OP's usage example.

OP:

UserModel    .find({}) // will get all users    .exec(function(err, users) {        // supposing that we don't have an error        // and we had users in our collection,        // the users variable here is an array        // of mongoose instances;        // wrong usage (from OP's example)        // return res.end(users.toJSON()); // has no method toJSON        // correct usage        // to apply the toJSON transformation on instances, you have to        // iterate through the users array        var transformedUsers = users.map(function(user) {            return user.toJSON();        });        // finish the request        res.end(transformedUsers);    });

My Example:

UserModel    .findById(someId) // will get a single user    .exec(function(err, user) {        // handle the error, if any        if(err) return handleError(err);        if(null !== user) {            // user might be null if no user matched            // the given id (someId)            // the toJSON method is available here,            // since the user variable here is a             // mongoose model instance            return res.end(user.toJSON());        }    });


First of all, try toObject() instead of toJSON() maybe?

Secondly, you'll need to call it on the actual documents and not the array, so maybe try something more annoying like this:

var flatUsers = users.map(function() {  return user.toObject();})return res.end(JSON.stringify(flatUsers));

It's a guess, but I hope it helps