通过循环中的单个文档更新查询进行多个文档更新

时间:2013-11-19 10:11:15

标签: node.js mongodb express mongoskin

我正在用Mongoskin在Node / Express / MongoDB中构建一个应用程序。 在这个应用程序中,有一个计划的功能,运行在每个月的开始。

此功能包含以下代码:

clients.find({}, {cost: 1, invoices: 1 }).toArray(function(err, dbDocs) {
  if (err) throw err; 

  // Set up a current time variable and a general populated invoice object.
  var currentTime = new Date();
  var invoice = {
    year: currentTime.getFullYear(), 
    quarter: Math.floor(currentTime.getMonth() / 3) + 1, 
    paid: false
  };

  // Loop trough the fetched documents.
  for (var i = 0, j = dbDocs.length; i < j; i += 1) { 
    invoice.quarterCost = (dbDocs[i].cost.monthly * 3);

    clients.update({_id:dbDocs[i]._id}, {$push:{ invoices: invoice }}, function(err, result) {
      if (err) throw err; 

      console.log('LogCost created new client invoice')
    ));
  }
});

此函数首先从数据库中查询所有可用的客户端文档,然后使用此数据为每个客户端创建一个新的发票对象,并将此发票推送到客户的发票数组,并将其保存到数据库中。

现在我在循环中获得了更新,这意味着当有许多客户端需要更新时,会有许多单个更新查询。我不希望超过100-200个客户。

问题:有没有更好的方法来构建此功能并且它是更新查询? 困扰我的是循环中的单个文档更新查询......但也许这是正确的方法。

0 个答案:

没有答案