私は、誰かが助けてくれることを願ってこのサークルで回ります。私はノードからセンサー値を受け取るnodejsアプリケーションを構築しています。あるノード上に複数のセンサーが存在する可能性があります。私がノードに追加し、センサー上にセンサーをプッシュすることができSubDocアレイのMongo SubDocにプッシュ
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]
});
:私は、次のスキーマに&モデルを構築したNodeJS、mongodはDBとマングース、ラズベリーパイで実行されているすべての、3を使用して
配列が、値の配列に値をプッシュできないようです。
私は、同様の問題に関するいくつかの例と質問を見てきましたが、人口を使ってみましたが、動作しないようです。この結果、このエラーのため、undefinedを返している
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
値は間違いなくセンサースキーマの配列です。
私はUIのために自動割り当てされたMongo DB IDではなく読み込み可能なIDを使用していますが、違いがあればMongoDB _idを使用できます。
どこが間違っていますか?
ああ、美人!ありがとう!私が変更しなければならなかったもう一つのことは、値のオブジェクトを値の変数から削除することでした。ちょうど2つのフィールドに残っていて、完全に機能しました。乾杯 – MSanders