Để đếm các bản ghi ngày trùng lặp trong MongoDB, hãy sử dụng tổng hợp () và $ nhóm. Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> 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") }
Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -
> db.demo160.find();
Điều này sẽ tạo ra kết quả sau -
{ "_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") }
Sau đây là truy vấn để nhóm theo ngày trong 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} } ... ]);
Điều này sẽ tạo ra kết quả sau -
{ "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") }