Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tổng hợp theo giờ và tính trung bình ($avg) trong MongoDB

Để tổng hợp dữ liệu, hãy sử dụng aggregate() trong MongoDB. Nó tính toán các giá trị tổng hợp cho dữ liệu trong collection.

Tạo collection với trường ngày giờ (ISODate) và Amount:

> db.demo544.insertOne({"DueTime":new ISODate("2020-01-10 12:10:20"),Amount:100});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e1f029e5f92834d7f05ce") }
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-12 12:00:00"),Amount:500});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e1f089e5f92834d7f05cf") }
> db.demo544.insertOne({"DueTime":new ISODate("2020-01-12 12:10:20"),Amount:900});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e1f109e5f92834d7f05d0") }

Hiển thị tất cả:

> db.demo544.find();

Kết quả:

{ "_id" : ObjectId("5e8e1f029e5f92834d7f05ce"), "DueTime" : ISODate("2020-01-10T12:10:20Z"), "Amount" : 100 }
{ "_id" : ObjectId("5e8e1f089e5f92834d7f05cf"), "DueTime" : ISODate("2020-01-12T12:00:00Z"), "Amount" : 500 }
{ "_id" : ObjectId("5e8e1f109e5f92834d7f05d0"), "DueTime" : ISODate("2020-01-12T12:10:20Z"), "Amount" : 900 }

Truy vấn aggregate nhóm theo giờ (sử dụng $hour) và tính trung bình Amount:

> db.demo544.aggregate( { "$group": { "_id": { "$hour": "$dueTime" }, "Amount": { "$avg": "$Amount" }}} )

Kết quả (tất cả 3 bản ghi đều ở giờ 12, trung bình = 500):

{ "_id" : null, "Amount" : 500 }

Lưu ý: Kết quả trả về "_id" : null do tên trường trong $group là "$dueTime" (chữ thường) nhưng dữ liệu lưu là DueTime (chữ hoa D). MongoDB phân biệt chữ hoa/thường. Cần sửa thành "$hour": "$DueTime" để ra "_id" : 12.