Mongoose一次删除多个数据

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);
        })
    })
Run Code Online (Sandbox Code Playgroud)

问题是我有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
Run Code Online (Sandbox Code Playgroud)


Rod*_*ros 17

假设您正在使用lo-dash,您可以item使用该_.pluck函数获取一组ID .我们称之为idsArray.现在,您可以$inasync.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
  }
Run Code Online (Sandbox Code Playgroud)

首先,$in将每个集合的db调用减少到一个.然后,async.parallel将并行运行任务,最后,remove直接从模型中删除find每个集合的操作.