Tôi có một số tài liệu trong Mongo mà trông giống như sau:MongoDB tổng hợp trong nhóm hàng ngày
{
_id : ObjectId("..."),
"make" : "Nissan",
..
},
{
_id : ObjectId("..."),
"make" : "Nissan",
"saleDate" : ISODate("2013-04-10T12:39:50.676Z"),
..
}
Lý tưởng nhất, tôi muốn để có thể đếm, bởi thực hiện, số lượng xe bán ra mỗi ngày. Sau đó tôi muốn xem hôm nay hoặc một cửa sổ như hôm nay trong bảy ngày qua.
tôi đã có thể thực hiện được quan điểm hàng ngày với một số mã xấu xí
db.inventory.aggregate(
{ $match : { "saleDate" : { $gte: ISODate("2013-04-10T00:00:00.000Z"), $lt: ISODate("2013-04-11T00:00:00.000Z") } } } ,
{ $group : { _id : { make : "$make", saleDayOfMonth : { $dayOfMonth : "$saleDate" } }, cnt : { $sum : 1 } } }
)
Mà sau đó mang lại kết quả
{
"result" : [
{
"_id" : {
"make" : "Nissan",
"saleDayOfMonth" : 10
},
"cnt" : 2
},
{
"_id" : {
"make" : "Toyota",
"saleDayOfMonth" : 10
},
"cnt" : 4
},
],
"ok" : 1
}
Vì vậy, đó là ok, nhưng tôi rất muốn để không phải thay đổi hai giá trị datetime trong truy vấn. Sau đó, như tôi đã đề cập ở trên, tôi muốn có thể chạy truy vấn này (một lần nữa, mà không phải sửa đổi nó mỗi lần) và xem kết quả tương tự được binned theo ngày trong tuần trước.
Oh và đây là dữ liệu mẫu Tôi đã sử dụng cho truy vấn
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T12:39:50.676Z")});
db.inventory.save({"make" : "Nissan"});
db.inventory.save({"make" : "Nissan","saleDate" : ISODate("2013-04-10T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-09T11:39:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:38:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:37:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:36:50.676Z")});
db.inventory.save({"make" : "Toyota","saleDate" : ISODate("2013-04-10T11:35:50.676Z")});
Cảm ơn trước, Kevin
Ý nghĩa của 676Z là gì? –
Chỉ cần cập nhật (từ năm 2017, câu hỏi này là cũ ..), tôi đã thay đổi câu trả lời được chấp nhận vì khung Mongo đã phát triển để giải quyết vấn đề này dễ dàng hơn nhiều. Tuy nhiên đạo cụ cho Asya cho câu trả lời ban đầu của cô. @AboozarRajabi, "676Z" là một phần tùy chọn của định dạng thời gian [ISO 8601] (https://en.wikipedia.org/wiki/ISO_8601), trong trường hợp này "676Z" đại diện cho hai phần của 2013-04-10T11: 35: 50.676Z, đầu tiên 676 là mili giây và "Z" là phím tắt để biểu thị múi giờ UTC. – Kevin