在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 回复
这是个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});
});