Can't get Mongoose virtuals to be part of the result object

Mike Pateras picture Mike Pateras · Oct 30, 2012 · Viewed 14.2k times · Source

bI'm declaring a virtual that I want to appear as part of the results of its schema's queries, but it's not showing up when I do a console.log on the object. Here's the schema:

var schema = new mongoose.Schema(
{
    Name: { type: String }
},
{
    toObject: { virtuals: true }
});

schema.virtual("Greet").get(function()
{
    return "My name is " + this.Name;
});

Should that toObject not set the virtual as a property of the results of any queries? It does not, nor does schema.set("toObject", { virtuals: true }). Am I doing this right?

Answer

JohnnyHK picture JohnnyHK · Oct 31, 2012

Because you're using JSON.stringify in your console.log call, that invokes the toJSON method on the model instance, not toObject.

So either omit the JSON.stringify in your call:

console.log(results[0]);

Or set the toJSON option on the schema like you're currently setting the toObject option.

...
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});