从另一个更新集合需要太长时间

时间:2018-08-06 15:12:18

标签: mongodb

我有这个脚本:

regexs = '.*[123].*'

问题是执行需要很长时间。 您是否知道如何使其更快? 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用 bulkWrite API来避免插入性能下降,该API通过批量发送插入操作来简化插入操作,甚至更好,它为您提供有关成功之处和成功之处的真实反馈失败。

MongoDB 3.2及更高版本:

var ops = [];
db.getCollection('A').find({}).forEach(function(doc) {
    ops.push({
        "insertOne": {
            "document": { "id": doc._id.valueOf() }
        }
    });

    if (ops.length === 500 ) {
        db.getCollection('aaa').bulkWrite(ops);
        ops = [];
    }
});

if (ops.length > 0)  
    db.getCollection('aaa').bulkWrite(ops);

MongoDB版本> = 2.6和<3.2:使用Bulk API

var bulk = db.getCollection('aaa').initializeUnorderedBulkOp(),
    counter = 0;

db.getCollection('A').forEach(function (doc) {    
    bulk.insert({ "id": doc._id.valueOf() });

    counter++;
    if (counter % 500 === 0) {
        // Execute per 500 operations
        bulk.execute(); 
        // re-initialize every 500 update statements
        bulk = db.getCollection('aaa').initializeUnorderedBulkOp();
    }
})
// Clean up remaining queue
if (counter % 500 !== 0) { bulk.execute(); }

答案 1 :(得分:0)

尝试使用聚合API:

db.getCollection('A').aggregate([
   {$match: {}},
   {$project: {
       id: {
           $toString: "$_id" // Added in mongo 4.0
      }
   }},
   {$out: 'aaa'} // This will override existing collections, use it wisely
])