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

kelompokkan menurut tanggal di mongodb

Jawaban baru menggunakan kerangka agregasi Mongo

Setelah pertanyaan ini ditanyakan dan dijawab, 10gen merilis Mongodb versi 2.2 dengan kerangka kerja agregasi, yang sekarang merupakan cara yang lebih baik untuk melakukan kueri semacam ini. Kueri ini sedikit menantang karena Anda ingin mengelompokkan berdasarkan tanggal dan nilai yang disimpan adalah stempel waktu, jadi Anda harus melakukan sesuatu untuk mengonversi stempel waktu menjadi tanggal yang cocok. Untuk keperluan contoh saya hanya akan menulis kueri yang mendapatkan jumlah yang tepat.

db.col.aggregate(
   { $group: { _id: { $dayOfYear: "$date"},
               click: { $sum: 1 } } }
   )

Ini akan mengembalikan sesuatu seperti:

[
    {
        "_id" : 144,
        "click" : 165
    },
    {
        "_id" : 275,
        "click" : 12
    }
]

Anda perlu menggunakan $match untuk membatasi kueri pada rentang tanggal yang Anda minati dan $project untuk mengganti nama _id untuk date . Bagaimana Anda mengubah hari dalam setahun kembali ke tanggal yang tersisa sebagai latihan untuk pembaca. :-)

10gen memiliki bagan konversi SQL ke Mongo Aggregation yang berguna untuk di-bookmark. Ada juga artikel khusus tentang operator agregasi tanggal.

Menjadi sedikit lebih menarik, Anda dapat menggunakan:

db.col.aggregate([
  { $group: {
      _id: {
        $add: [
         { $dayOfYear: "$date"}, 
         { $multiply: 
           [400, {$year: "$date"}]
         }
      ]},   
      click: { $sum: 1 },
      first: {$min: "$date"}
    }
  },
  { $sort: {_id: -1} },
  { $limit: 15 },
  { $project: { date: "$first", click: 1, _id: 0} }
])

yang akan memberi Anda 15 hari terakhir dan mengembalikan beberapa waktu dalam setiap hari di date bidang. Misalnya:

[
    {
        "click" : 431,
        "date" : ISODate("2013-05-11T02:33:45.526Z")
    },
    {
        "click" : 702,
        "date" : ISODate("2013-05-08T02:11:00.503Z")
    },
            ...
    {
        "click" : 814,
        "date" : ISODate("2013-04-25T00:41:45.046Z")
    }
]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Luwak menambahkan beberapa objek ke array jika tidak ada berdasarkan

  2. Cara menanyakan koleksi sub dokumen menggunakan driver MongoDB dan C#

  3. Pembaca Mongo C# JSON mengharapkan nilai tetapi menemukan 'replSetGetStatus'

  4. Apakah mungkin untuk menghasilkan Koleksi MongoDB yang dinamai secara dinamis?

  5. Kesalahan koneksi Mongodb di dalam wadah buruh pelabuhan