MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

nhóm pymongo theo ngày giờ

Đúng. Bạn có thể sử dụng Toán tử Ngày với $ substr $ concat để gắn kết tất cả lại với nhau.

db.test.aggregate([
    {"$group": {
        "_id" : { "$concat": [
            {"$substr": [{"$year": "$date"}, 0, 4 ]},
            "-",
            {"$substr": [{"$month": "$date"}, 0, 2 ]},
            "-",
            {"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]},
        ]},
        "count": {"$sum": 1 }
     }},
     {"$sort": { "_id": 1 }}
])

Bạn chỉ có thể sử dụng các toán tử ngày tháng và tạo tài liệu như trong:

"day": { 
    "year": {"$year": "$date" },
   "month": {"$month": "$date"}, 
   "day": {"$dayOfYear": "$date"}
}

Điều đó cũng hoạt động tốt. Nhưng điều này mang lại cho bạn một chuỗi đẹp. Điều này sử dụng thực tế là $substr sẽ truyền từ số nguyên sang chuỗi. Nếu điều đó được thêm vào tài liệu.

Xem Toán tử Ngày tài liệu hướng dẫn sử dụng các cách phân chia thời gian khác có thể được sử dụng cho các ngày.

Tốt hơn, hãy sử dụng toán học ngày để trả về Ngày BSON:

import datetime

db.test.aggregate([
    { "$group": {
        "_id": {
            "$add": [
               { "$subtract": [
                   { "$subtract": [ "$date", datetime.datetime.utcfromtimestamp(0) ] },
                   { "$mod": [
                       { "$subtract": [ "$date", datetime.datetime.utcfromtimestamp(0) ] },
                       1000 * 60 * 60 * 24
                   ]}
               ]},
               datetime.datetime.utcfromtimestamp(0)
           ]
        },
        "count": { "$sum": 1 }
    }},
    { "$sort": { "_id": 1 } }
])

Đây datetime.datetime.utcfromtimestamp(0) sẽ được đưa vào đường ống dưới dạng Ngày BSON đại diện cho "kỷ nguyên". Khi bạn $subtract một ngày BSON từ một ngày khác, sự khác biệt tính bằng mili giây được trả về. Điều này cho phép bạn "làm tròn" ngày thành ngày hiện tại bằng cách trừ đi $mod kết quả để nhận được phần còn lại của sự chênh lệch mili giây so với một ngày.

Điều này cũng đúng với $add trong đó "thêm" Ngày BSON vào một giá trị số sẽ dẫn đến Ngày BSON.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng findOne trong mongodb để lấy phần tử có id tối đa

  2. MongoDB đếm số lượng tài liệu mới mỗi phút dựa trên _id

  3. Cập nhật / Xóa tài liệu con trong mongodb bằng trình điều khiển C #

  4. Người mới bắt đầu MongoDB - chuẩn hóa hay không chuẩn hóa?

  5. Cách truy vấn / cập nhật tài liệu phụ trong MongoDB bằng trình điều khiển C #