插入时出现MongoDb复制错误

时间:2018-06-28 06:42:39

标签: node.js mongodb

我正在将文档插入mongod db colletion

每个时间的触发日期和事件都会改变,但是如果在任何时间间隔内连续插入它们,我们将收到mongo复制错误。

但是,如果我们要插入带有时间的插入,则会被插入。

 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索引: 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(内部/进程/next_tick.js:73:7)       在process._tickCallback(internal / process / next_tick.js:104:9)

如何为立即插入生成唯一的ID

1 个答案:

答案 0 :(得分:0)

ObjectId值。 12字节的ObjectId值包含:

  • 4个字节的值,表示自Unix时代以来的秒数,
  • 3字节机器标识符,
  • 2字节进程ID,和
  • 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();
});