猫鼬子文件困境

时间:2014-07-05 04:31:38

标签: node.js mongoose

我在指标中有子文档。但我认为我没有正确保存,因为每个文档都没有正确的度量数据..而不是它显示度量:['[object Object]','[object Object]','[object Object]']并且数据无法访问。这很难弄清楚,因为Mongoose没有给出这类东西的错误。如果有人可以请告诉我有什么问题。

编辑:为了让事情更加混乱,在浏览器中显示指标有3个数组:

Object {cpuResult: Object}
cpuResult: Object
__v: 0
_id: "53b781d9fb272c4f44d8d1d8"
avaiable: true
metrics: Array[3]
0: "[object Object]"
1: "[object Object]"
2: "[object Object]"
length: 3

这是我的架构:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var CpuSchema = new Schema({
    timeStamp : { type : Date, index: true },
    avaiable : Boolean,
    status : String,
    metrics : [ { duration : String,
        data : Number,
        type : String,
        unit : String
    } ,
    { duration : String,
        data : Number,
        type : String,
        unit : String
    },
    { duration : String, 
        data : Number,
        type : String,
        unit : String
    }
    ]
});

module.exports = CpuSchema;

这是我的保存功能:

function saveCpu(cpuResult) {
    var cpu = new Cpu ({
        timeStamp : cpuResult.timestamp,
        avaiable : cpuResult.available,
        status : cpuResult.status,
        metrics : [ { duration : "15m",
                      data : cpuResult.metrics["15m"].data,
                      type: cpuResult.metrics["15m"].type,
                      unit: cpuResult.metrics["15m"].unit
                    },
                    { duration : "5m",
                        data : cpuResult.metrics["5m"].data,
                        type: cpuResult.metrics["5m"].type,
                        unit: cpuResult.metrics["5m"].unit
                    },
                    { duration : "1m",
                        data : cpuResult.metrics["1m"].data,
                        type: cpuResult.metrics["1m"].type,
                        unit: cpuResult.metrics["1m"].unit
                    }]
    });
    cpu.save(function (err, product, numberAffected) { 
        db_finish(err, product, numberAffected, 
                  cpuResult, "cpuResult") });

以下是我插入的数据:

{ timestamp: 1404534588528,
  available: true,
  status: 'success',
  metrics: 
   { '15m': { data: 0.05, type: 'n', unit: 'unknown' },
     '5m': { data: 0.01, type: 'n', unit: 'unknown' },
     '1m': { data: 0, type: 'n', unit: 'unknown' } } }

1 个答案:

答案 0 :(得分:2)

当在Mongoose模式的子文档中包含名为type的字段时,您需要使用对象定义其类型,或者它看起来像Mongoose一样,声明父字段的类型

因此,请将您的架构更改为:

var CpuSchema = new Schema({
    timeStamp : { type : Date, index: true },
    avaiable : Boolean,
    status : String,
    metrics : [ { duration : String,
        data : Number,
        type : {type: String},
        unit : String
    } ,
    { duration : String,
        data : Number,
        type : {type: String},
        unit : String
    },
    { duration : String, 
        data : Number,
        type : {type: String},
        unit : String
    }
    ]
});