30

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?

4

3 回答 3

70

因为您JSON.stringifyconsole.log调用中使用,所以调用toJSON模型实例上的方法,而不是toObject.

所以要么JSON.stringify在你的电话中省略:

console.log(results[0]);

或者toJSON像您当前设置选项一样在架构上设置toObject选项。

...
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});
于 2012-10-31T00:27:17.327 回答
2

我的错误是没有在查询中包含所需的字段。如果没有在投影中选择它们,那么 mongoose 不知道如何组合/计算虚拟场。

于 2019-06-19T12:24:21.610 回答
1

我最终在这里做了一些非常愚蠢的事情。我使用的是Doc.find代替,Doc.findOne所以我试图访问文档数组而不是文档本身上的虚拟。

于 2017-08-11T03:27:28.887 回答