// define a schema
const personSchema = new Schema({
name: {
first: String,
last: String
}
},
{
toJSON: {
virtuals: true,
},
toObject: {
virtuals: true,
},
},);
personSchema.virtual('fullName').
get(function() {
return this.name.first + ' ' + this.name.last;
}).
set(function(v) {
this.name.first = v.substr(0, v.indexOf(' '));
this.name.last = v.substr(v.indexOf(' ') + 1);
});
// compile our model
const Person = mongoose.model('Person', personSchema);
这是从文档中定义的#virtuals
让我们来看另一个与person相关的模型:
const shopSchema = new Schema({
name:String,
owner: { type: Schema.Types.ObjectId, ref: "Person" },
});
const Shop = mongoose.model('Shop', shopSchema);
现在,如何获得 fullName
虚拟商店 owner
. 在这里,所有者不包括 fullName
```
const getAllData = async () => {
const shops = await Shop.find().populate("owner").lean();
console.log(shops)
}
1条答案
按热度按时间hrysbysz1#
根据 Mongoose 文件:
使用lean()可以绕过所有mongoose特性,包括虚拟、getter/setter和默认值。如果要将这些功能与lean()一起使用,则需要使用相应的插件。
以便,
fullName
已从返回的数据中删除。简单的方法让你得到fullName
virtuals是将查询更改为以下内容:它不会用的
lean()
在…内populate
或者您可以禁用lean()
完全