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

Tổng hợp Mongodb theo ngày dựa trên dấu thời gian unix

MongoDB 4.0 và mới hơn

Sử dụng $toDate

db.session_log.aggregate([
    { "$group": {
        "_id": {
            "$dateToString": {
                "format": "%Y-%m-%d",
                "date": {
                    "$toDate": { 
                        "$multiply": [1000, "$LASTLOGIN"]
                    }
                }
            }
        },
        "count": { "$sum": 1 }
    } }
])

hoặc $convert

db.session_log.aggregate([
    { "$group": {
        "_id": {
            "$dateToString": {
                "format": "%Y-%m-%d",
                "date": {
                    "$convert": { 
                        "input":  { 
                            "$multiply": [1000, "$LASTLOGIN"] 
                        }, 
                        "to": "date"
                    }
                }
            }
        },
        "count": { "$sum": 1 }
    } }
])

MongoDB> =3.0 và <4.0:

db.session_log.aggregate([
    { "$group": {
        "_id": {
            "$dateToString": {
                "format": "%Y-%m-%d",
                "date": {
                    "$add": [
                        new Date(0), 
                        { "$multiply": [1000, "$LASTLOGIN"] }
                    ]
                }
            }
        },
        "count": { "$sum": 1 }
    } }
])

Bạn cần chuyển đổi LASTLOGIN trường thành dấu thời gian mili giây thông qua việc nhân giá trị với 1000

{ "$multiply": [1000, "$LASTLOGIN"] }

, sau đó chuyển đổi thành một ngày

"$add": [
    new Date(0),
    { "$multiply": [1000, "$LASTLOGIN"] }
]

và điều này có thể được thực hiện trong $project bằng cách thêm thời gian mili giây của bạn vào 0 mili giây Date(0) đối tượng, sau đó trích xuất $year , $month , $dayOfMonth các phần từ ngày được chuyển đổi mà sau đó bạn có thể sử dụng trong $group đường dẫn để nhóm các tài liệu theo ngày.

Do đó, bạn nên thay đổi quy trình tổng hợp của mình thành:

var project = {
    "$project":{ 
        "_id": 0,
        "y": {
            "$year": {
                "$add": [
                    new Date(0),
                    { "$multiply": [1000, "$LASTLOGIN"] }
                ]
            }
        },
        "m": {
            "$month": {
                "$add": [
                    new Date(0),
                    { "$multiply": [1000, "$LASTLOGIN"] }
                ]
            }
        }, 
        "d": {
            "$dayOfMonth": {
                "$add": [
                    new Date(0),
                    { "$multiply": [1000, "$LASTLOGIN"] }
                ]
            }
        }
    } 
},
group = {   
    "$group": { 
        "_id": { 
            "year": "$y", 
            "month": "$m", 
            "day": "$d"
        },  
        "count" : { "$sum" : 1 }
    }
};

Chạy đường ống tổng hợp:

db.session_log.aggregate([ project, group ])

sẽ cho các kết quả sau (dựa trên tài liệu mẫu):

{ "_id" : { "year" : 2014, "month" : 1, "day" : 3 }, "count" : 1 }

Một cải tiến sẽ là chạy phần trên trong một đường dẫn duy nhất là

var group = {   
    "$group": { 
        "_id": {    
            "year": {
                "$year": {
                    "$add": [
                        new Date(0),
                        { "$multiply": [1000, "$LASTLOGIN"] }
                    ]
                }
            },
            "mmonth": {
                "$month": {
                    "$add": [
                        new Date(0),
                        { "$multiply": [1000, "$LASTLOGIN"] }
                    ]
                }
            }, 
            "day": {
                "$dayOfMonth": {
                    "$add": [
                        new Date(0),
                        { "$multiply": [1000, "$LASTLOGIN"] }
                    ]
                }
            }
        },  
        "count" : { "$sum" : 1 }
    }
};

Chạy đường ống tổng hợp:

db.session_log.aggregate([ group ])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kho lưu trữ và kế thừa Spring-data mongodb

  2. Cách thiết lập cơ sở dữ liệu kiểm tra và phát triển riêng biệt trong sao băng

  3. Cách sử dụng giá trị trường làm tên khóa trong kết quả Mongodb

  4. Chuyển đổi chuỗi thành ngày tháng trong mongodb

  5. Mongoose + lodash mở rộng sao chép mảng đối tượng không chính xác