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

Mik*_*ras 26 virtual mongoose

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

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

schema.virtual("Greet").get(function()
{
    return "My name is " + this.Name;
});
Run Code Online (Sandbox Code Playgroud)

那个toObject不应该将虚拟设置为任何查询结果的属性吗?它没有,schema.set也没有("toObject",{virtuals:true}).我这样做了吗?

Joh*_*yHK 66

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

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

console.log(results[0]);
Run Code Online (Sandbox Code Playgroud)

或者toJSON在模式上设置选项,就像您当前正在设置toObject选项一样.

...
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});
Run Code Online (Sandbox Code Playgroud)

  • 这是Mongoose最大的缺点之一.糟糕的文档和怪癖.目前使用没有Mongoose的本机MongoDB驱动程序处理项目.有点麻烦,但完成工作. (4认同)
  • 我最终修复它 - 我不知道我需要定义这两个属性.开车送我疯了.大声笑 (3认同)
  • 好问题; 很好的答案.这应该被认为是正确的. (2认同)
  • 定义`toObject`和`toJSON`的两个属性对我有用 (2认同)
  • 文档在哪里说明您必须添加到对象:{virtuals:true},toJSON:{virtuals:true}? (2认同)