เพื่อสุ่มเอกสารจาก MongoDB ใช้ Aggregation Pipeline กับ Stage $sample ไวยากรณ์:
db.yourCollectionName.aggregate([{$sample: {size: 1}}]);
สร้างข้อมูลตัวอย่าง
> db.employeeInformation.insert({"EmployeeId":1,"EmployeeName":"Maxwell","EmployeeAge":26});
WriteResult({ "nInserted" : 1 })
> db.employeeInformation.insert({"EmployeeId":2,"EmployeeName":"David","EmployeeAge":25});
WriteResult({ "nInserted" : 1 })
> db.employeeInformation.insert({"EmployeeId":3,"EmployeeName":"Carol","EmployeeAge":24});
WriteResult({ "nInserted" : 1 })
> db.employeeInformation.insert({"EmployeeId":4,"EmployeeName":"Bob","EmployeeAge":28});
WriteResult({ "nInserted" : 1 })
> db.employeeInformation.insert({"EmployeeId":5,"EmployeeName":"Sam","EmployeeAge":27});
WriteResult({ "nInserted" : 1 })
แสดงเอกสารทั้งหมด
> db.employeeInformation.find().pretty();
สุ่มเอกสาร 1 รายการ
> db.employeeInformation.aggregate([{$sample: {size: 1}}]).pretty();
{ "_id" : ObjectId("5c6d30bb734e98fc0a434ae9"), "EmployeeId" : 5, "EmployeeName" : "Sam", "EmployeeAge" : 27 }
สุ่มอีกครั้ง (ได้คนละรายการ)
> db.employeeInformation.aggregate([{$sample: {size: 1}}]).pretty();
{ "_id" : ObjectId("5c6d308c734e98fc0a434ae6"), "EmployeeId" : 2, "EmployeeName" : "David", "EmployeeAge" : 25 }
$sample ใช้ Reservoir Sampling เหมาะสำหรับสุ่มตัวอย่างขนาดเล็กจากข้อมูลใหญ่