我正在努力学习MongoDB/Node,我注意到在模式中我经常看到这样的情况:
toObject: { virtuals: true }
toJSON: { virtuals: true }这两行是什么意思?
发布于 2014-11-13 13:15:55
这不是"MongoDB“,而是专门针对猫鼬ODM的。
在模式定义中有一个“虚拟”字段的概念。这基本上允许这样做(从文档中明显收集):
var personSchema = new Schema({
name: {
first: String,
last: String
}
});
var Person = mongoose.model( "Person", personSchema );但是,假设您只想“存储”这些属性,然后可以在代码“全名”中访问一些内容。这就是“虚拟人”进来的地方:
personSchema.virtual("name.full").get(function () {
return this.name.first + ' ' + this.name.last;
});现在我们可以做这样的事情:
var bad = new Person({
name: { "first": "Walter", "last": "White" }
});
console.log("%s is insane", bad.name.full); // Walter White is insane所以name.full实际上并不存在于数据中,它只是代码中的模式表示。但是,当然,“绑定”到一个函数,该函数使用对象中的实际数据来生成一个方法,该方法将方法中的代码中的两个字段组合在一起返回一个值。
这基本上就是“虚拟”字段的意义所在。它们实际上是在文档"object“上定义的”方法“,这些方法表示的值不是”存储“的或持久化在数据库中的。通常它们是基于数据存储中的实际持久化值。
但要真正澄清你的直接问题。默认情况下,猫鼬只会根据“存储”字段“序列化”其内部对象结构的内容。所以这两句“真正”的意思是:
因此,第二种情况是对象上的.toJSON()方法的“隐式”调用。配置所做的是告诉该方法不仅包括对象中的数据或“字段”,还包括定义的“虚拟”方法及其提供的输出。.toObject()也一样。
https://stackoverflow.com/questions/26909509
复制相似问题