Để sao chép tài liệu sang collection mới, dùng aggregation với $out. Cú pháp:
db.oldCollection.aggregate([{ $sample: { size: N }}, {$out: "newCollection"}], {allowDiskUse: true});
Tạo collection nguồn:
> db.sourceCollection.insertOne({"EmployeeName":"Robert","EmployeeSalary":15000});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0397c1f5e889d7a5199506") }
> db.sourceCollection.insertOne({"EmployeeName":"David","EmployeeSalary":25000});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0397c3f5e889d7a5199507") }
> db.sourceCollection.insertOne({"EmployeeName":"Mike","EmployeeSalary":29000});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0397c4f5e889d7a5199508") }
Hiển thị nguồn:
> db.sourceCollection.find().pretty();
Tạo collection đích và sao chép:
> db.createCollection('destinationCollection'); { "ok" : 1 } > db.sourceCollection.aggregate([{ $sample: { size: 333333 }}, {$out: "destinationCollection"}], {allowDiskUse: true});Kiểm tra collection đích:
> db.destinationCollection.find().pretty()Giải thích:
$samplelấy mẫu ngẫu nhiên (size lớn = lấy tất cả).$outghi kết quả vào collection mới (tự tạo nếu chưa có).allowDiskUse: truecho phép dùng disk khi dữ liệu lớn. Thứ tự có thể thay đổi do $sample ngẫu nhiên.