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

问题描述 投票:0回答:3

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 }) 也不会。我这样做对吗?

virtual mongoose
3个回答
73
投票

因为您在

JSON.stringify
调用中使用
console.log
,所以会调用模型实例上的
toJSON
方法,而不是
toObject

因此,要么在通话中省略

JSON.stringify

console.log(results[0]);

或者在架构上设置

toJSON
选项,就像您当前设置
toObject
选项一样。

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

2
投票

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


1
投票

我最终在这里做了一些非常愚蠢的事情。我使用的是

Doc.find
而不是
Doc.findOne
,因此我尝试访问文档数组上的虚拟而不是文档本身。

© www.soinside.com 2019 - 2024. All rights reserved.