【问题标题】:Inserting multiple document into MongoDB with Mongoskin使用 Mongoskin 将多个文档插入 MongoDB
【发布时间】:2013-12-13 02:39:32
【问题描述】:

我正在尝试通过循环插入多个文档,但我遇到了 ObjecId 唯一性的问题。

我有这个功能:

// Fetch all client documents. 
db.collection('clients').find({}, {cost: 1}).toArray(function(err, dbDocs) {
  if (err) throw err; 

  // Set up a general doc.
  var currentTime = new Date();
  var doc = {
    year: currentTime.getFullYear(), 
    quarter: Math.floor(currentTime.getMonth() / 3) + 1, 
    paid: false
  };

  // For each client document, insert a document to invoices collection.
  for (var i = 0, j = dbDocs.length; i < j; i += 1) { 
    doc.quarterCost = (dbDocs[i].cost.monthly * 3);
    doc.client_id = dbDocs[i]._id;

    db.collection('invoices').insert(doc, function(err, result) {
      if (err) throw err; 
      if (result) console.log('Invoice created');
    });
  }
}); 

在创建并插入第一个文档后,我收到“mongoError: E110000 Duplicate key error index: ...”。

问题: 为什么这个循环试图插入每个具有相同 ObjectID 的文档,从而产生错误? 如何我如何重写它以确保 ObjectId 每次都是随机的?

【问题讨论】:

    标签: node.js mongodb mongoskin


    【解决方案1】:

    在第一次插入时,doc 被修改为具有新的 _id 字段。这意味着您需要在 for 循环开始时重置它,因为驱动程序不会在文档中添加新的 _id 值(如果已经有一个值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2015-12-09
      • 2018-09-20
      • 2018-07-28
      • 1970-01-01
      • 2020-09-05
      • 2015-06-13
      相关资源
      最近更新 更多