异步Mongo DB插入导致重复键错误;我怎样才能正确地进行异步插入?

时间:2014-12-07 06:45:33

标签: node.js mongodb asynchronous mongoose

我在脚本中使用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 }

0 个答案:

没有答案