无法使Mongoose虚拟对象成为结果对象的一部分

时间:2012-10-30 06:39:42

标签: virtual mongoose

b我声明一个虚拟的我想要作为其模式查询结果的一部分出现,但是当我在对象上执行console.log时它并没有显示出来。这是架构:

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

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

toObject是否应该将virtual设置为任何查询结果的属性?它没有,schema.set也没有(“toObject”,{virtuals:true})。我这样做了吗?

3 个答案:

答案 0 :(得分:64)

由于您在JSON.stringify调用中使用console.log,因此会调用模型实例上的toJSON方法,而不是toObject

因此,请忽略通话中的JSON.stringify

console.log(results[0]);

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我的错误是未在查询中包括必填字段。 如果未在投影中选择它们,那么猫鼬将不知道如何组合/计算虚拟场。