首页 > 解决方案 > 响应输出未显示猫鼬模式 nodejs 中存在的全部信息

问题描述

我设计了一个像这样的猫鼬模式:

const metricsSchema = mongoose.Schema({
    _id : mongoose.Schema.Types.ObjectId,
    level : String,
    details: {
         demo: String,
         full: String
    }   
});

另外,我已经处理了这样的响应:

router.post('/',(req, res, next)=>{
    const metrics = new Metrics({
        _id : new mongoose.Types.ObjectId(),
        level : req.body.level,
        details:{
            demo: req.body.demo,
            full: req.body.full
        } 
    });

    res.status(201).json({
        metrics: metrics
    })
});

但是,当我使用 Postman 像这样发布 JSON 数据时:

{
    "level" :"schema" ,
    "details":{
        "demo" : "2465",
        "full" : "1211234"
    } 
}

我得到这样的输出:

{
    "metrics": {
        "_id": "5e09c156b0ce8a4a54a3ecca",
        "level": "schema"
    }
}

我没有得到其余的输出:响应 json 中的 demo 和 full。我希望得到这样的输出:

{
    "metrics": {
        "_id": "5e09c156b0ce8a4a54a3ecca",
        "level": "schema"
        "details": {
            "demo": "2465",
            "full": "1211234"
        } 
    }
}

更新:我找到了一个解决方案,其中 Mongoose 模式分为两部分:

const detailsSchema = mongoose.Schema({
    _id : mongoose.Schema.Types.ObjectId,
    demo: String,
    full: String
});

mongoose.model('Details',detailsSchema );

const metricsSchema = mongoose.Schema({
    _id : mongoose.Schema.Types.ObjectId,
    level : String,
    details: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Details'
    } 
});

然而,这也没有奏效。

标签: node.jsmongoose

解决方案


您必须更改代码如下:

router.post('/',(req, res, next)=>{
    const metrics = new Metrics({
        _id : new mongoose.Types.ObjectId(),
        level : req.body.level,
        details:{
            demo: req.body.details.demo,   <----- see the change here
            full: req.body.details.full
        } 
    });

    res.status(201).json({
        metrics: metrics
    })
});

推荐阅读