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})。我这样做了吗?
答案 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)
我的错误是未在查询中包括必填字段。 如果未在投影中选择它们,那么猫鼬将不知道如何组合/计算虚拟场。