I have a strange problem and cannot figure out what the problem is. The Error-message doesn't help.
I'm sending an "alarm" to the server and want to save this alarm to my "device" which already exist in the database.
The alarm object I send to the server looks like this:
{
actionTaken: "none",
dateTime: "20152111191512",
difference: 4.88,
timestamp: 1448128894781
}
The Schema for the device is as follows:
var deviceSchema = new Schema({
deviceId: {
type : String,
index : {
unique : true,
dropDups : true
}
},
alarms : [ {
timestamp : Number,
dateTime : String, //yyyymmddhhss
difference : Number,
actionTaken : String, //"send sms"
} ]
});
I load the device from the database (deviceId
is set):
Thermometer.findOne({
deviceId : deviceId
}, function(error, device){
//error handling
var now = (new Date().getTime());
var nowDateTime = (new Date()).toISOString().slice(0, 19).replace(/[-Ts:]/g, "");
var newAlarm = {
timestamp : now,
dateTime : nowDateTime, // yyyymmddhhmmss
difference : diff,
actionTaken : "none"
};
device.alarms.push(newAlarm); //EXCEPTION !
// device.save //doesn't get called
});
As you can see in the comment, I get an Exception/Error when I want to push the "newAlarm"-object to the alarms-array of my device.
The Error says:
Cast to string failed for value [object Object]
at path alarms
Error-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}
Do you have an idea?
For me it doesn't make any sense. The array and its content (object) is specified in the Schema. Why is there a string cast error with the whole object as value?
What I use:
"express": "3.2.6",
"express-session":"1.7.6",
"hjs": "*",
"mongoose": "4.0.5",
"nodemailer": "1.4.0"
EDIT: I don't want to use nested Schemas. It is also possible to do it with arrays. I do it with arrays in some other Schemas.
EDIT 2:
I added an property lastAlarm
and do
device.lastAlarm = alarm;
but after that, thermometer.lastAlarm is still undefined... but alarm is an object. So is it possible that the device object is locked some how?
See Question&Answers more detail:
os