Ошибка дублирования MongoDb при вставке - PullRequest
0 голосов
/ 28 июня 2018

Я вставляю документы в коллекцию mongod db

каждый раз триггер и событие будут меняться, но если вставить их непрерывно с любым промежутком времени, мы получим ошибку дублирования монго.

но если мы делаем вставку со временем назад, она вставляется.

 var MongoClient = require('mongodb').MongoClient;

     var msgObj = {
      "event" : "Password expired",
   "assignee" : "Test",
      "triggerDate" : "06/21/2018 18:44:27", }
 var url  ="mongodb://127.0.0.1:27017/org_democustomer"
           for( var i=0; i<300;i++){

              MongoClient.connect(url, function (err, db) {
                  var connection = db;
                   var collection = db.collection('events');
                    // Insert all customer's tickets into document
                  collection.insert(msgObj, function (err, result) {
                    if (err) throw err;
                     connection.close();
                 });
            });
    }

Итак, как происходит создание ObjectId? это основано на времени? ошибка

MongoError: E11000 коллекция повторяющихся ошибок: org_mssdemocustomer.testalerts index: id dup ключ: {: ObjectId ('507f191e810c19729de860ea')} в Function.MongoError.create (/Users/zessta/Desktop/MSSP/MSSPBackend/msp-backend/siem/node_modules/mongodb-core/lib/error.js:31:11) в toError (/Users/zessta/Desktop/MSSP/MSSPBackend/msp-backend/siem/node_modules/mongodb/lib/utils.js:139:22) по адресу /Users/zessta/Desktop/MSSP/MSSPBackend/msp-backend/siem/node_modules/mongodb/lib/collection.js:668:23 в handleCallback (/Users/zessta/Desktop/MSSP/MSSPBackend/msp-backend/siem/node_modules/mongodb/lib/utils.js:120:56) в resultHandler (/Users/zessta/Desktop/MSSP/MSSPBackend/msp-backend/siem/node_modules/mongodb/lib/bulk/ordered.js:421:14) по адресу /Users/zessta/Desktop/MSSP/MSSPBackend/msp-backend/siem/node_modules/mongodb-core/lib/connection/pool.js:469:18 в _combinedTickCallback (внутренняя / process / next_tick.js: 73: 7) at process._tickCallback (internal / process / next_tick.js: 104: 9)

Как создать уникальный идентификатор для немедленной вставки

1 Ответ

0 голосов
/ 28 июня 2018

Значение ObjectId. 12-байтовое значение ObjectId состоит из:

  • 4-байтовое значение, представляющее секунды с начала эпохи Unix,
  • 3-байтовый идентификатор машины,
  • 2-байтовый идентификатор процесса и
  • 3-байтовый счетчик, начиная со случайного значения.

Вот ваш код, который работает нормально.

var MongoClient = require('mongodb').MongoClient;
var ObjectID = require('mongodb').ObjectID
var msgObj = {
    "event": "Password expired",
    "assignee": "Test",
    "triggerDate": "06/21/2018 18:44:27"
}
var url = "mongodb://127.0.0.1:27017"

MongoClient.connect(url, function(err, db) {
if (err) {
    console.log(err);
}
for (var i = 0; i < 300; i++) {
    //var connection = db;
    //var collection = db.collection('events');
    var dbo = db.db("org_democustomer1");
    // Insert all customer's tickets into document
    msgObj._id = new ObjectID();
    dbo.collection("events").insert(msgObj, function(err, result) {
        if (err) throw err;
    });
}
db.close();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...