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

Làm cách nào để chuẩn hóa / giảm dữ liệu thời gian trong mongoDB?

Đây là cách bạn có thể làm điều đó trong khuôn khổ tổng hợp. Tôi đang sử dụng một đơn giản hóa nhỏ - tôi chỉ nhóm vào Năm, Tháng và Ngày - trong trường hợp của bạn, bạn sẽ cần thêm giờ và phút cho các tính toán chi tiết hơn. Bạn cũng có thể lựa chọn xem có thực hiện trung bình có trọng số hay không nếu phân phối điểm không đồng nhất trong mẫu dữ liệu bạn nhận được.

project={"$project" : {
        "year" : {
            "$year" : "$DateTime"
        },
        "month" : {
            "$month" : "$DateTime"
        },
        "day" : {
            "$dayOfWeek" : "$DateTime"
        },
        "array_serial" : 1,
        "Port Name" : 1,
        "metric" : 1
    }
};
group={"$group" : {
        "_id" : {
            "a" : "$array_serial",
            "P" : "$Port Name",
            "y" : "$year",
            "m" : "$month",
                    "d" : "$day"
        },
        "avgMetric" : {
            "$avg" : "$metric"
        }
    }
};

db.metrics.aggregate([project, group]).result

Tôi đã chạy điều này với một số dữ liệu mẫu ngẫu nhiên và nhận được một cái gì đó có định dạng sau:

[
    {
        "_id" : {
            "a" : "12345",
            "P" : "CL1-B",
            "y" : 2012,
            "m" : 9,
            "d" : 6
        },
        "avgMetric" : 100.8
    },
    {
        "_id" : {
            "a" : "12345",
            "P" : "CL1-B",
            "y" : 2012,
            "m" : 9,
            "d" : 7
        },
        "avgMetric" : 98
    },
    {
        "_id" : {
            "a" : "12345",
            "P" : "CL1-A",
            "y" : 2012,
            "m" : 9,
            "d" : 6
        },
        "avgMetric" : 105
    }
]

Như bạn có thể thấy, đây là một kết quả cho mỗi kết hợp array_serial, port name, năm / tháng / ngày. Bạn có thể sử dụng $ sort để sắp xếp chúng theo thứ tự bạn muốn để xử lý chúng từ đó.

Đây là cách bạn sẽ mở rộng bước dự án để bao gồm giờ và phút trong khi làm tròn số phút thành trung bình sau mỗi năm phút:

{
    "$project" : {
        "year" : {
            "$year" : "$DateTime"
        },
        "month" : {
            "$month" : "$DateTime"
        },
        "day" : {
            "$dayOfWeek" : "$DateTime"
        },
        "hour" : {
            "$hour" : "$DateTime"
        },
        "fmin" : {
            "$subtract" : [
                {
                    "$minute" : "$DateTime"
                },
                {
                    "$mod" : [
                        {
                            "$minute" : "$DateTime"
                        },
                        5
                    ]
                }
            ]
        },
        "array_serial" : 1,
        "Port Name" : 1,
        "metric" : 1
    }
}

Hy vọng bạn sẽ có thể mở rộng điều đó cho dữ liệu và yêu cầu cụ thể của mình.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao tôi nhận được Không thể đặt tiêu đề sau khi chúng được gửi đến lỗi máy khách trong Nodejs?

  2. Cách sao lưu cơ sở dữ liệu Open edX MongoDB của bạn

  3. Cập nhật mảng Mongo hoặc đẩy vào một truy vấn

  4. Mongoose mở rộng xác thực mặc định

  5. MongoDB:Cập nhật / Nâng cấp so với Chèn