我正在尝试将数据从MQTT代理保存到Mongodb。使用以下代码:
var mqtt = require('mqtt'); //includes mqtt server
var mongodb = require('mongodb'); // includes mongoDB
var mongodbClient = mongodb.MongoClient; //initialises the mongoDB client
var mongodbURI = 'mongodb://localhost:27017/WheelSenseHat';
var deviceRoot = "iot-lab/wheel/sensehat/";
var collection,client;
mongodbClient.connect(mongodbURI, setupCollection);
function setupCollection(err, db) {
if(err)
throw err;
collection=db.collection("WheelData");
client=mqtt.connect({ host: 'iot.eclipse.org', port: 1883 });
client.subscribe(deviceRoot+"+"); //subscribing to the topic name
client.on('message', insertEvent); //inserting the event
}
//function that displays the data in the MongoDataBase
function insertEvent(topic,message) {
var key=topic.replace(deviceRoot,'');
collection.update(
{ _id:key },
{ $push: { events: { event: { value:message, when:new Date() } } } },
{ upsert:true },
function(err,docs) {
if(err) {
console.log("Insert fail")// Improve error handling
}
}
);
}
但是数据没有保存在MongoDB中。输出如下:
显示dbs 管理员0.000GB 本地0.000GB 使用WheelSenseHat 切换到db WheelSenseHat 展示收藏品
答案 0 :(得分:1)
您的程序是否甚至收到了MQTT消息?尝试将console.log(topic + ":" + message)
放入insertEvent()
函数中,看看它是否被调用。您的订阅会转换为iot-lab/wheel/sensehat/+
,它会匹配iot-lab/wheel/sensehat/data1
之类的MQTT消息,但不会匹配iot-lab/wheel/sensehat/sensor/data
......“+”仅匹配一个“级别”,而“#”将匹配任何内容。如果传入的MQTT消息超过了'sensehat'的一个级别,那么您的程序将不会收到任何消息....因此,您的数据库中没有记录。