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

Agregasi Rata-Rata dengan Cap Waktu String

Secara realistis Anda "harus" memperbaiki string stempel waktu di sini. Tapi mereka setidaknya dalam "urutan leksikal" karena format "yyyy-dd-mm" yang melekat pada String ISO.

Jadi karena mereka memiliki panjang yang tetap, kita sebenarnya dapat menggabungkannya menggunakan kerangka kerja agregasi untuk agregasi sisi server.

Pengambilan sampel bulan Mei untuk pemilihan tanggal:

cursor = client[page1.currentDB][page2.currentColl].aggregate([
  { "$match": {
     "Technique-Meteo_Direction moyenne du vent_Mean value wind direction[]":
       { "$exists": True },
     "timestamp": {
       "$gte": "2017-05-01 00:00:00", "$lt": "2017-06-01 00:00:00"
     }
  }},
  { "$group": {
    "_id": {
      "$substr": [ "$timestamp", 0, 10 ]
    },
    "average":
      { "$avg": "$Technique-Meteo_Direction moyenne du vent_Mean value wind direction[]" }
  }}
])

Ini akan mendapatkan total "per hari" untuk setiap hari di bulan yang dipilih. Ini bergantung pada nilai leksikal bidang. Prinsip dasar yang sama berlaku untuk semua interval di sini. Jadi, Anda cukup mengisi string dengan nilai nol hingga interval yang Anda inginkan untuk dipilih.

Hal yang sama berlaku untuk "kunci pengelompokan" di sini, di mana nilainya menjadi _id juga harus menjadi substring hingga interval yang diperlukan. Untungnya format string adalah "zero padded" jadi nilainya kurang dari "10" didahului oleh nol seperti pada "05" . Sekali lagi ini mempertahankan urutan leksikal untuk "rentang".

Itulah yang harus Anda tuju, dan saya kira Anda harus memilih bidang Anda di sini, serta menghasilkan string stempel waktu untuk pemilihan rentang.

Tapi Anda pasti bisa mendapatkan sesuatu dengan bisa $group pada [$substr][2] bagian dari nilai aktual untuk menunjukkan interval yang Anda perlukan, dan tidak perlu mengulangi beberapa permintaan kueri hanya untuk setiap interval dan biarkan database melakukannya untuk Anda.

Namun "kunci" Anda adalah masalah lain, dan karena tidak konsisten, Anda tampaknya terjebak dengan mengulangi kemungkinan "nama kunci" dan melakukan agregasi terpisah untuk semuanya. Anda mungkin dapat membuat pernyataan lebih lama dan mendapatkan "jumlah" dan "jumlah" untuk masing-masing menggunakan $ifNull untuk menentukan kapan harus meningkat. Kemudian Anda akan $divide "setelah" $group tahap pipa untuk mendapatkan "rata-rata" akhir.

Bagian terakhir itu agak rumit tanpa mengetahui cakupan penuhnya, dan itu tidak sepenuhnya ada dalam pertanyaan Anda. Jadi saya akan menyerahkannya kepada Anda untuk menyelesaikannya, atau mengajukan pertanyaan terpisah.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cegah Data Musim Semi untuk Mongo untuk mengonversi id ke ObjectId

  2. MongoDB:Cara melakukan pencarian teks dan mengurutkan berdasarkan tanggal

  3. populasi luwak mengembalikan array nol

  4. Menyebarkan aplikasi node js yang menggunakan mongo db di aws

  5. File Dropzone tidak sepenuhnya diproses saat memanggil processFile(File)