我在指标中有子文档。但我认为我没有正确保存,因为每个文档都没有正确的度量数据..而不是它显示度量:['[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' } } }
答案 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
}
]
});