ในการนับบันทึกวันที่ซ้ำกันใน MongoDB ให้ใช้ aggregate() และ $group ให้เราสร้างคอลเลกชันที่มีเอกสาร -
> db.demo160.insertOne({"DueDate":new ISODate()}); { "acknowledged" : true, "insertedId" : ObjectId("5e357525fdf09dd6d0853a04") } > db.demo160.insertOne({"DueDate":new ISODate("2019-01-11")}); { "acknowledged" : true, "insertedId" : ObjectId("5e357532fdf09dd6d0853a05") } > db.demo160.insertOne({"DueDate":new ISODate()}); { "acknowledged" : true, "insertedId" : ObjectId("5e357534fdf09dd6d0853a06") } > db.demo160.insertOne({"DueDate":new ISODate("2019-01-11")}); { "acknowledged" : true, "insertedId" : ObjectId("5e357538fdf09dd6d0853a07") } > db.demo160.insertOne({"DueDate":new ISODate("2020-04-10")}); { "acknowledged" : true, "insertedId" : ObjectId("5e357542fdf09dd6d0853a08") }
แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -
> db.demo160.find();
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "_id" : ObjectId("5e357525fdf09dd6d0853a04"), "DueDate" : ISODate("2020-02-01T12:55:01.983Z") } { "_id" : ObjectId("5e357532fdf09dd6d0853a05"), "DueDate" : ISODate("2019-01-11T00:00:00Z") } { "_id" : ObjectId("5e357534fdf09dd6d0853a06"), "DueDate" : ISODate("2020-02-01T12:55:16.787Z") } { "_id" : ObjectId("5e357538fdf09dd6d0853a07"), "DueDate" : ISODate("2019-01-11T00:00:00Z") } { "_id" : ObjectId("5e357542fdf09dd6d0853a08"), "DueDate" : ISODate("2020-04-10T00:00:00Z") }
ต่อไปนี้เป็นแบบสอบถามเพื่อจัดกลุ่มตามวันที่ใน MongoDB -
> db.demo160.aggregate([ ... { $group: { ... _id: { ... $add: [ ... { $dayOfYear: "$DueDate"}, ... { $multiply: ... [400, {$year: "$DueDate"}] ... } ... ]}, ... Frequency: { $sum: 1 }, ... d: {$min: "$DueDate"} ... } ... }, ... { $sort: {_id: 1} }, ... { $limit: 100}, ... { $project: { date: "$d", Frequency: 1, _id: 0} } ... ]);
สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
{ "Frequency" : 2, "date" : ISODate("2019-01-11T00:00:00Z") } { "Frequency" : 2, "date" : ISODate("2020-02-01T12:55:01.983Z") } { "Frequency" : 1, "date" : ISODate("2020-04-10T00:00:00Z") }