I have a document from a mongoose find that I want to extend before JSON encoding and sending out as a response. If I try adding properties to the doc it is ignored. The properties don't appear in Object.getOwnPropertyNames(doc)
making a normal extend not possible. The strange thing is that JSON.parse(JSON.encode(doc))
works and returns an object with all of the correct properties. Is there a better way to do this?
Mongoose Model
's inherit from Document
's, which have a toObject()
method. I believe what you're looking for should be the result of doc.toObject()
.
http://mongoosejs.com/docs/api.html#document_Document-toObject
Another way to do this is to tell Mongoose that all you need is a plain JavaScript version of the returned doc by using lean()
in the query chain. That way Mongoose skips the step of creating the full model instance and you directly get a doc
you can modify:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
the fast way if the property is not in the model :
document.set( key,value, { strict: false });
model.find({Branch:branch},function (err, docs){ if (err) res.send(err)
res.send(JSON.parse(JSON.stringify(docs))) });
Just use,
var convertedJSON = JSON.parse(JSON.stringify(mongooseReturnedDocument);
and Then,
convertedJSON.newProperty = 'Hello!'
'Hello!' can be anything, a number, a object or JSON Object Literal.
Cheers! :)