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 }) 也不会。我这样做对吗?
因为您在
JSON.stringify
调用中使用 console.log
,所以会调用模型实例上的 toJSON
方法,而不是 toObject
。
因此,要么在通话中省略
JSON.stringify
:
console.log(results[0]);
toJSON
选项,就像您当前设置 toObject
选项一样。
{
toObject: { virtuals: true },
toJSON: { virtuals: true }
});
我的错误是没有在查询中包含所需的字段。 如果在投影中没有选择它们,那么猫鼬不知道如何组合/计算虚拟场。
我最终在这里做了一些非常愚蠢的事情。我使用的是
Doc.find
而不是 Doc.findOne
,因此我尝试访问文档数组上的虚拟而不是文档本身。