我在JavaScript中使用MQTT。当订阅者正在等待消息时,发布者将每隔1毫秒发布一次消息。
但是在订阅者端它收到消息但是在存储到MongoDB时出错。
以下是我的代码。 请帮帮我出来。提前谢谢。
publisher.js
var mqtt = require('mqtt');
var url = 'mqtt://localhost:1883';
/*var payload = {
deviceId : '8675309'
};*/
var client = mqtt.connect(url);
var sensorProperty = {};
client.on('connect', function () {
var publishedData = [];
var totalNoData = 100000;
setInterval(
function () // Call out to get the time
{
console.log(publishedData.length);
if (publishedData.length < totalNoData) {
var sensorId = 4001;
var intervalId = setInterval(
function(){
if (sensorId < 9001) {
sensorProperty["dfsdffsdf"] = sensorId.toString();
sensorProperty["accountId"] = "1388142455353";
sensorProperty["dfgdfgf"] = 1;
sensorProperty["dfgdfgdfg"] = 260;
sensorProperty["podfgdfgdfgwer"] = 12;
sensorProperty["timestamp"] = new Date();
sensorProperty.timestamp.setDate(sensorProperty.timestamp.getDate() - 50);
sensorProperty.timestamp = new Date(sensorProperty.timestamp).toISOString();
sensorProperty.timestamp = new Date(sensorProperty.timestamp);
var message = JSON.stringify(sensorProperty);
console.log(message)
client.publish('airasoul', message, { qos: 1 }, function() {
});
sensorId++;
} else {
clearInterval(intervalId);
console.log("cycle complete");
}
},1)
}else {
clearInterval();
console.log("Exceeds");
}
}, 20000);// end check
});
&#13;
Subscriber.js
var mqtt = require('mqtt');
var url = 'mqtt://localhost:1883';
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var mongoUrl = 'mongodb://localhost:27017/dfgdfgdfgdfgd';
var client = mqtt.connect(url, { clientId: 'mqtt-sub-', clean: false });
var receivedMessage = [];
client.on('connect', function () {
client.subscribe('airasoul', { qos: 1 });
});
client.on('message', function (topic, message) {
receievedMessage = JSON.parse(message.toString());
console.log('received message ', message.toString());
MongoClient.connect( mongoUrl, function(err, db) {
assert.equal(err, null);
insertDocument(db, function() {
db.close();
});
});
});
var insertDocument = function(db, callback) {
db.collection('sensordata').insertMany([receievedMessage], function(err, result) {
console.log("Inserted documents into the sensorData collection.");
console.log(err);
console.log(result);
callback();
});
};
&#13;
显示错误,
[MongoError: E11000 duplicate key error collection: powerbankdb.sensordata index: _id_ dup key: { : ObjectId('58a2f56dd190242e789d758d') }]
name: 'MongoError',
message: 'E11000 duplicate key error collection: powerbankdb.sensordata index: _id_ dup key: { : ObjectId(\'58a2f56dd190242e789d758d\') }',
driver: true,
code: 11000,
index: 0,
errmsg: 'E11000 duplicate key error collection: powerbankdb.sensordata index: _id_ dup key: { : ObjectId(\'58a2f56dd190242e789d758d\') }',
getOperation: [Function],
toJSON: [Function],
toString: [Function] }
ok: [Getter],
&#13;
答案 0 :(得分:0)
错误是说存在重复的密钥。确保没有具有相同_id的文档(在这种情况下为“58a2f56dd190242e789d758d”)