【发布时间】:2018-12-07 03:30:05
【问题描述】:
我在 mongod db 集合中插入文档
每次 triggerdate 和 event 都会发生变化,但是如果以任何时间间隔连续插入它们,我们就会得到 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 复制键:{: 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
【问题讨论】:
-
在您的代码中,您将 ObjectId 硬编码为固定字符串,因此您当然会得到重复项。你能发布正确的代码吗?如果这是您正在运行的代码,只需删除字符串并让 ObjectId 自己计算一个 id!
-
为什么需要自己创建ObjectId? Mongo 客户端可以为您完成。
-
如果需要,您可以
ObjectID();生成一个。 implementation here -
没有对象ID也是同样的错误,见修改后的代码