【发布时间】:2016-02-24 03:16:37
【问题描述】:
我有一个奇怪的问题,无法弄清楚问题是什么。错误消息没有帮助。
我正在向服务器发送“警报”,并希望将此警报保存到数据库中已存在的“设备”中。
我发送到服务器的报警对象如下所示:
{
actionTaken: "none",
dateTime: "20152111191512",
difference: 4.88,
timestamp: 1448128894781
}
设备的Schema如下:
var deviceSchema = new Schema({
deviceId: {
type : String,
index : {
unique : true,
dropDups : true
}
},
alarms : [ {
timestamp : Number,
dateTime : String, //yyyymmddhhss
difference : Number,
actionTaken : String, //"send sms"
} ]
});
我从数据库中加载设备(deviceId 已设置):
Thermometer.findOne({
deviceId : deviceId
}, function(error, device){
//error handling
var now = (new Date().getTime());
var nowDateTime = (new Date()).toISOString().slice(0, 19).replace(/[-T\s:]/g, "");
var newAlarm = {
timestamp : now,
dateTime : nowDateTime, // yyyymmddhhmmss
difference : diff,
actionTaken : "none"
};
device.alarms.push(newAlarm); //EXCEPTION !
// device.save //doesn't get called
});
正如您在评论中看到的,当我想将“newAlarm”对象推送到我设备的警报阵列时,我得到了一个异常/错误。
错误说:
在路径
alarms处的值[object Object]转换为字符串失败
错误对象:
kind: "string",
message: "Cast to string failed for value "[object Object]" at path "alarms"",
name: "CaseError",
path: "alarms",
stack: undefined,
value: {actionTaken: "none", dateTime: "20152111191512", difference: 4.88, timestamp: 1448128894781}
你有什么想法吗?
对我来说没有任何意义。数组及其内容(对象)在 Schema 中指定。为什么整个对象作为值会出现字符串转换错误?
我用什么:
"express": "3.2.6",
"express-session":"1.7.6",
"hjs": "*",
"mongoose": "4.0.5",
"nodemailer": "1.4.0"
编辑:我不想使用嵌套模式。也可以用数组来做。我用其他一些模式中的数组来做。
编辑 2:
我添加了一个属性lastAlarm 并做
device.lastAlarm = alarm;
但在那之后, thermometer.lastAlarm 仍然是未定义的......但 alarm 是一个对象。那么设备对象是否有可能被锁定?
【问题讨论】:
-
可能对你有帮助--Link--
-
我已经找到了,但不幸的是没有帮助