我有这个脚本:
regexs = '.*[123].*'
问题是执行需要很长时间。 您是否知道如何使其更快? 谢谢!
答案 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
])