[英]Applying getters on a "find" query in Mongoose?
抱歉,如果之前有人问过这个问题(老实说,我已经搜索过了)。
基本上,我有一个简单的架构:
var ProductSchema = new Schema({
name: {type: String},
image: {type: String, get: getImageUrl},
stock: {type: Number},
price: {type: Number},
description: String
});
在哪里
var getImageUrl = function(imgUrl) {
if (imgUrl.indexOf('http://') !== 0) {
return 'http://' + os.hostname() + (app.port ? app.port : '') + '/public/' + imgUrl;
} else {
return imgUrl;
}
};
getter 本身有效,如果我从数据库中检索特定项目,但当我尝试使用Product.find()
或其他查询时无效,getter 不会应用,并且我得到“原始”(未处理)属性. 我试过使用Product.find({}, [], {getters: true}
无济于事。我错过了什么吗?
编辑 - 使用 mongod 1.8.5 版和 mongoose 2.5.10
今天遇到同样的问题-使用find()时不应用吸气剂。 我的解决方法是使用虚拟代替,并将其包含在json结果中。
schema.virtual("APP_ID_URL").get(function() {
if (this.APP_ID > 0){
return "<a href='#'>" + this.APP_ID + "</a>";
}
else{
return "";
}
});
schema.set('toJSON', { virtuals: true });
更新您的架构以添加用于填充对象和 JSON 的配置
var ProductSchema = new Schema({
name: {type: String},
image: {type: String, get: getImageUrl},
stock: {type: Number},
price: {type: Number},
description: String
},
{
toObject : {getters: true},
toJSON : {getters: true}
});
模式应该在getter的定义下,如果在getter函数定义之后定义模式,则可以到达它。 它应该根据规范工作: http : //mongoosejs.com/docs/getters-setters.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.