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.现在,您可以$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
}
Run Code Online (Sandbox Code Playgroud)
首先,$in将每个集合的db调用减少到一个.然后,async.parallel将并行运行任务,最后,remove直接从模型中删除find每个集合的操作.
| 归档时间: |
|
| 查看次数: |
21912 次 |
| 最近记录: |