MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menormalkan/mengurangi data waktu di mongoDB?

Inilah cara Anda melakukannya dalam kerangka agregasi. Saya menggunakan penyederhanaan kecil - saya hanya mengelompokkan Tahun, Bulan dan Tanggal - dalam kasus Anda, Anda perlu menambahkan jam dan menit untuk perhitungan berbutir halus. Anda juga memiliki pilihan tentang apakah akan melakukan rata-rata tertimbang jika distribusi titik tidak seragam dalam sampel data yang Anda dapatkan.

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

Saya menjalankan ini dengan beberapa data sampel acak dan mendapatkan sesuatu dengan format ini:

[
    {
        "_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
    }
]

Seperti yang Anda lihat, ini adalah satu hasil per array_serial, nama port, kombinasi tahun/bulan/tanggal. Anda dapat menggunakan $sort untuk memasukkannya ke dalam urutan yang Anda inginkan untuk memprosesnya dari sana.

Berikut adalah bagaimana Anda akan memperluas langkah proyek untuk memasukkan jam dan menit sambil membulatkan menit menjadi rata-rata setiap lima menit:

{
    "$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
    }
}

Semoga Anda dapat memperluasnya ke data dan persyaratan spesifik Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Saya ingin hasil dengan nilai berbeda dari satu bidang dari mongodb menggunakan data pegas

  2. MongoDB $graphLookup dapatkan anak-anak di semua level - hasil bersarang

  3. Hapus Duplikat di mongodb

  4. Bagaimana cara mencatat kueri saya di MongoDB C# Driver 2.0?

  5. Mongo dengan Java - temukan kueri dengan ukuran batch