【发布时间】:2018-04-29 00:59:54
【问题描述】:
我正在围绕这个转圈,希望有人能提供帮助。我正在构建一个从节点接收传感器值的 nodejs 应用程序。一个节点上可以有多个传感器。
使用 NodeJS、Mongod DB 和 Mongoose,都在树莓派上运行,3 我构建了以下 Schemas & Model:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var valueSchema = new Schema ({
timestamp: {type: Date},
value: {}
});
var sensorSchema = new Schema ({
id: {type: Number},
type: {type: String},
description: {type: String},
ack: {type: Boolean},
values: [valueSchema]
});
var SensorNode = mongoose.model('SensorNode', {
id: {type: Number, required: true},
protocol: {},
sensors: [sensorSchema]
});
我可以添加节点,并将传感器推送到传感器数组,但我似乎无法将值推送到值数组。
我查看了一些关于类似问题的其他示例和问题,并查看了使用填充,但似乎无法让它们工作。
这是我的代码:
function saveValue(rsender, rsensor, payload) {
var value = {
values: {
timestamp: new Date().getTime(),
value: payload
}
}
SensorNode.findOneAndUpdate({
"id": rsender,
"sensors.id": rsensor
}, {
"$push": {
"sensors.$": value
}
}, function(err, result) {
if (err) {
console.log(err);
}
console.log(result);
});
}
这将返回未定义的结果和此错误:
MongoError: exception: Cannot apply $push/$pushAll modifier to non-array
Values 绝对是传感器架构中的一个数组。
为了 UI 的缘故,我使用的是可读 ID,而不是自动分配的 Mongo DB ID,但如果这有什么不同,我可以使用 MongoDB _id,我不明白为什么会这样?
我哪里错了?
【问题讨论】:
标签: arrays node.js mongodb mongoose schema