exi*_*onX 12 mongoose mongodb node.js
我有一个很大的id列表,我想从mongodb中删除多个模型,主要思想是我对多个模式中的文档具有相同的id,我想从每个模型中删除一个文档.我是这样做的:
_.each(wrongList, function(item) {
        UPUSTP.find({id: item.id}).remove(function(err) {
            if (err)
                console.log("Error while deleting " + err.message);
        })
        UPUANAM.find({id: item.id}).remove(function(err) {
            if (err)
                console.log("Error while deleting " + err.message);
        })
        UPUEXE.find({id: item.id}).remove(function(err) {
            if (err)
                console.log("Error while deleting " + err.message);
        })
        UPUEXO.find({id: item.id}).remove(function(err) {
            if (err)
                console.log("Error while deleting " + err.message);
        })
        UPUPROC.find({id: item.id}).remove(function(err) {
            if (err)
                console.log("Error while deleting " + err.message);
        })
    })
问题是我有14000+个ID wrongList并且查询有效但是需要花费很多时间才能完成...我怎样才能增加删除的时间?我可以批量删除或类似的东西吗?
Tiz*_*ssi 23
我认为你可以使用mongodb的$ in运算符.
http://docs.mongodb.org/manual/reference/operator/query/in/
就像是:
UTUSTP.remove({_id: {$in: wronglist}}, function(){...}); // and so on
Rod*_*ros 17
假设您正在使用lo-dash,您可以item使用该_.pluck函数获取一组ID .我们称之为idsArray.现在,您可以$in在async.parallel通话中remove直接使用运算符,例如:
async.parallel({
  function (callback) {
    UPUSTP.remove({ id: { $in: idsArray } }, function (err) {
      if (err) return callback("Error while deleting " + err.message);
      callback(null, "Some useful message here...");
    });
  },
  . // do the same with the other collections
  .
  .
  function (err, result) {
    // check the error and do somethin useful with the results
  }
首先,$in将每个集合的db调用减少到一个.然后,async.parallel将并行运行任务,最后,remove直接从模型中删除find每个集合的操作.
| 归档时间: | 
 | 
| 查看次数: | 21912 次 | 
| 最近记录: |