Có một số cách để thực hiện việc này.
Đầu tiên là với Date Aggregation Operators, cho phép bạn phân tích các giá trị "ngày" trong tài liệu. Cụ thể đối với "nhóm" như mục đích chính:
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$year": "$created_at" },
"dayOfYear": { "$dayOfYear": "$created_at" },
"interval": {
"$subtract": [
{ "$minute": "$created_at" },
{ "$mod": [{ "$minute": "$created_at"}, 15] }
]
}
}},
"count": { "$sum": 1 }
}}
])
Cách thứ hai là sử dụng một mẹo nhỏ khi một đối tượng ngày được trừ (hoặc hoạt động toán trực tiếp khác) từ một đối tượng ngày, sau đó kết quả là một giá trị số biểu diễn dấu thời gian epoch thời gian giữa hai đối tượng. Vì vậy, chỉ cần sử dụng ngày kỷ nguyên bạn nhận được đại diện mili giây epoch. Sau đó, sử dụng toán ngày cho khoảng thời gian:
db.collection.aggregate([
{ "$group": {
"_id": {
"$subtract": [
{ "$subtract": [ "$current_date", new Date("1970-01-01") ] },
{ "$mod": [
{ "$subtract": [ "$current_date", new Date("1970-01-01") ] },
1000 * 60 * 15
]}
]
},
"count": { "$sum": 1 }
}}
])
Vì vậy, nó phụ thuộc vào loại định dạng đầu ra bạn muốn cho khoảng thời gian nhóm. Cả hai cơ bản đại diện cho cùng một điều và có đủ dữ liệu để xây dựng lại như là một đối tượng "ngày" trong mã của bạn.
Bạn có thể đặt bất kỳ thứ gì khác bạn muốn vào phần "toán tử nhóm" sau khi nhóm _id
. Tôi chỉ sử dụng ví dụ "đếm" cơ bản thay cho bất kỳ tuyên bố thực sự nào từ bản thân bạn về những gì bạn thực sự muốn làm.
Nguồn
2014-11-08 06:31:17
là một cái gì đó của họ trong câu trả lời với điều kiện không rõ ràng hoặc không áp dụng cho trường hợp của bạn? Lưu ý rằng nó vẫn không được chấp nhận. –
Đừng bận tâm, anh ấy đã trả lời, tại sao lại bận tâm với việc chấp nhận câu trả lời. – nurgasemetey