在MongoDB中存储多个JSON时出错

时间:2017-02-14 12:29:05

标签: javascript json mongodb

我在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;
&#13;
&#13;

Subscriber.js

&#13;
&#13;
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;
&#13;
&#13;

显示错误,

&#13;
&#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;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

错误是说存在重复的密钥。确保没有具有相同_id的文档(在这种情况下为“58a2f56dd190242e789d758d”)