[求助] Mongoose 数据类型的问题
在mongoose中定义以下Schema:
var v = new Schema({
name: { type: String },
status: { type: Number }
});
然后在查询结果中想将Number类型的status字段替换成字符串返回:
model.find(function(datas) {
datas.forEach(function(n){
switch(n.status) {
case 1: n.status = "正常"; break;
case 2: n.status = "不正常"; break;
default: n.status = "未知"; break;
}
})
res.render("a", {data:datas});
});
但是,由于model里面定义的status字段类型是Number,所以导致这里遍历结果集修改字段为字符串不生效。 请教下这里应该怎么处理啊(PS:排除在view中进行处理的方法)
4 回复
推荐你使用mongoose的Virtuals属性,参见http://mongoosejs.com/docs/guide.html
这是个localization的问题,确实是放在view中处理比较合理 此外,mongoose对String提供enum支持:
var v = new Schema({
name: { type: String },
status: { type: String, enum: ['normal', 'abnormal', 'unknown'] }
});
你这里修改status不成功原因是mongoose的查询返回的是mongoose的document对象,不要当成POJO处理,这是个大坑,一定要记住,很多莫名其妙的错误都来源于此
document可以用toObject
转换成POJO对象
model.find(function(datas) {
datas.forEach(function(n, index){
n = n.toObject();
switch(n.status) {
case 1: n.status = "正常"; break;
case 2: n.status = "不正常"; break;
default: n.status = "未知"; break;
}
datas[index] = n;
})
res.render("a", {data:datas});
});
我尝试将结果集遍历重新赋值给另一个遍历,结果还是不行,我想到可能是由于mongoose返回的原因。 但是有点想不通的是,对于Javascript来说,应该就是Object类型,我通过输出发现结果接只是单纯的查询结果,如果是特殊的类型应该返回的是包含有一坨坨自定义原型的结构吧。