CNode

[求助] Mongoose 数据类型的问题

Kkenticny发布于12 年前最后回复12 年前4 回复9719 浏览0 收藏

在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)

I
ifeiteng#1·12 年前

推荐你使用mongoose的Virtuals属性,参见http://mongoosejs.com/docs/guide.html

R
ravenwang#2·12 年前

这是个localization的问题,确实是放在view中处理比较合理 此外,mongoose对String提供enum支持:

var v = new Schema({
    name: { type: String },
    status: { type: String, enum: ['normal', 'abnormal', 'unknown'] }
});
R
ravenwang#3·12 年前

你这里修改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});
});
K
kenticny#4·12 年前

我尝试将结果集遍历重新赋值给另一个遍历,结果还是不行,我想到可能是由于mongoose返回的原因。 但是有点想不通的是,对于Javascript来说,应该就是Object类型,我通过输出发现结果接只是单纯的查询结果,如果是特殊的类型应该返回的是包含有一坨坨自定义原型的结构吧。

参与回复
登录后即可参与回复。登录