我在脚本中使用Async模块将文档异步插入Mongo DB集合中,但是,在第一次插入后,它总是给我一个重复的键错误。我没有为新文件提供_id,我希望它由Mongo生成。我实际上是Mongo的新手,尽管寻找线索,但我无法弄清楚如何正确地做到这一点。任何建议都会有所帮助。
我有一个异步队列,我将添加数据插入任务,并且我一次将并发限制为8个插入。
taskQueues[collName].writeQueue = async.queue(
function(insertData, taskCompletedCb) {
composer.Base.Collections[collName]
.insert(dataToInsert, { safe: true }, function (err, data) {
if (err) dataInsertedCb(err, false);
else dataInsertedCb(false, data);// Returns an array of the data that was inserted
});
}, 8);
然后我使用循环来添加任务,在循环中代码如下:
dataToInsert = defaultData.insertable[collName];// There is no _id defined, all index field data has been double checked, no invalid values
taskQueues[collName].writeQueue.push(dataToInsert, function(err, data) {
if (err) queueTasksCompleteCb(err, false);
else {
_.each(data, function(singleDataItem) {
dataInserted.push(singleDataItem);
});
}
});
我得到的错误就像:
{ [MongoError: insertDocument :: caused by :: 11000 E11000 duplicate key error index: dbname.coll.$_id_ dup key: { : ObjectId('xxx') }]
name: 'MongoError',
lastOp: { _bsontype: 'Timestamp', low_: 0, high_: 0 },
connectionId: 378828,
err: 'insertDocument :: caused by :: 11000 E11000 duplicate key error index: dbname.coll.$_id_ dup key: { : ObjectId(\'xxx\') }',
code: 11000,
n: 0,
ok: 1 }