Mongodb 在Mongoose中使用Virtuals的优势
我想展示一下在猫鼬中使用虚拟技术建立关系的优势。它会导致更快地从数据库中检索信息吗?虚拟现实是给定模型的附加字段。它们的值可以通过定义的功能手动或自动设置。公共虚拟财产是一个人的全名,由用户的名字和姓氏组成 虚拟属性不会在数据库中持久化。它们仅在逻辑上存在,不写入文档集合 范例 猫鼬模式 用户架构有两个属性指示用户的名字和姓氏:Mongodb 在Mongoose中使用Virtuals的优势,mongodb,mongoose,Mongodb,Mongoose,我想展示一下在猫鼬中使用虚拟技术建立关系的优势。它会导致更快地从数据库中检索信息吗?虚拟现实是给定模型的附加字段。它们的值可以通过定义的功能手动或自动设置。公共虚拟财产是一个人的全名,由用户的名字和姓氏组成 虚拟属性不会在数据库中持久化。它们仅在逻辑上存在,不写入文档集合 范例 猫鼬模式 用户架构有两个属性指示用户的名字和姓氏:first和last // define user schema var userSchema = new Schema({ first: String,
first
和last
// define user schema
var userSchema = new Schema({
first: String,
last: String
});
// compile our model
var User = mongoose.model('User', userSchema);
// create a document
var mentalist = new User({
first: 'Patrick',
last: 'Jane'
});
假设我们想要获得精神主义者的全名,我们可以手动添加从第一个到最后一个属性:
console.log(mentalist.first + ' ' + mentalist.last); // Patrick Jane
定义虚拟财产
实际上,有一种更好的方法可以获取用户的全名:虚拟字段。使用virtuals,您可以只编写一次名称连接
Mongoose将虚拟字段的定义拆分为GET和SET方法
获取方法
virtuals get方法是一个返回虚拟值的函数。您可以执行复杂的处理,也可以仅连接单个文档字段值
userSchema.virtual('fullname').get(function() {
return this.first + ' ' + this.last;
});
上面的代码示例只是连接第一个和最后一个属性值。这样,虚拟全名属性现在将打印与上面相同的输出:
console.log(mentalist.fullname); // Patrick Jane
设置方法
setter方法对于拆分字符串或执行其他操作非常有用。通过传递适当的函数定义虚拟setter并执行所需的处理。下面的示例将传递的名称变量拆分为任意空格
userSchema.virtual('fullname').set(function (name) {
var split = name.split(' ');
this.first = split[0];
this.last = split[1];
});
名称的第一部分指定给第一个属性,第二部分指定给最后一个属性。此集合方法将覆盖以前的模型值,并将传递的值指定为fullname属性
var humor = new User({
first: '',
last: ''
});
humor.fullname = 'Kimball Cho';
console.log(humor.first); // Kimball
console.log(humor.last); // Cho
查询和字段选择
Virtuals不可用于文档查询或字段选择。只有非虚拟属性可用于查询和字段选择
如您所见,虚拟属性不是静态模型属性。他们
其他模型函数是否返回基于默认值的值
架构字段
你能举个例子说明你想如何在你的模式中使用虚拟现实吗?Virtuals不会加快任何速度,但会为设置关系和检索文档增加便利