【问题标题】:Error in storing multiple JSON in MongoDB在 MongoDB 中存储多个 JSON 时出错
【发布时间】:2017-02-14 12:29:04
【问题描述】:

我在 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


});

订阅者.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();
	});
};

显示错误,

[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],

【问题讨论】:

    标签: javascript json mongodb


    【解决方案1】:

    错误是说存在重复键。确保没有具有相同 _id 的文档(本例中为“58a2f56dd190242e789d758d”)

    【讨论】:

    • id 是 mongo 生成的,不是先生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2022-10-16
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多