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

Temukan jumlah catatan berurutan maksimum berdasarkan satu bidang di Kueri Mongodb

Anda dapat melakukan operasi mapReduce ini.

Pertama pembuat peta:

var mapper = function () {


    if ( this.flag == true ) {
        totalCount++;
    } else {
        totalCount = 0;
    }

    if ( totalCount != 0 ) {
        emit (
        counter,
        {  _id: this._id, totalCount: totalCount }
    );
    } else {
      counter++;
    }

};

Yang terus menghitung total waktu yang true nilai terlihat di bendera. Jika hitungan itu lebih dari 1 maka kita keluarkan nilainya, juga berisi dokumen _id . Penghitung lain yang digunakan untuk kunci bertambah ketika bendera false , agar memiliki "kunci" pengelompokan untuk kecocokan.

Kemudian peredam:

var reducer = function ( key, values ) {

    var result = { docs: [] };

    values.forEach(function(value) {
        result.docs.push(value._id);
        result.totalCount = value.totalCount;
    });

    return result;

};

Cukup tekan _id nilai ke array hasil bersama dengan totalCount.

Kemudian jalankan:

db.people.mapReduce(
    mapper,
    reducer,
   { 
       "out": { "inline": 1 }, 
       "scope": { 
           "totalCount": 0, 
           "counter": 0 
       }, 
       "sort": { "updated_at": 1 } 
   }
)

Jadi dengan mapper dan reducer fungsi, kami kemudian mendefinisikan variabel global yang digunakan dalam "lingkup" dan meneruskan "sort" yang diperlukan pada updated_at tanggal. Yang memberikan hasilnya:

{
    "results" : [
        {
            "_id" : 1,
            "value" : {
                "docs" : [
                     3,
                     4
                 ],
                 "totalCount" : 2
            }
        },
        {
            "_id" : 2,
            "value" : {
            "docs" : [
                7,
                8,
                5
             ],
             "totalCount" : 3
             }
        }
    ],
    "timeMillis" : 2,
    "counts" : {
            "input" : 7,
            "emit" : 5,
            "reduce" : 2,
            "output" : 2
    },
    "ok" : 1,
}

Tentu saja Anda bisa melewati totalCount variabel dan cukup gunakan panjang array, yang akan sama. Tapi karena kamu ingin menggunakan penghitung itu, itu hanya ditambahkan. Tapi begitulah prinsipnya.

Jadi ya, ini adalah masalah yang cocok untuk mapReduce, dan sekarang Anda memiliki contohnya.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mendorong objek ke dalam skema array di Mongoose

  2. Flask &MongoDB - Untuk Loop tidak berfungsi

  3. Format tanggal dalam output kueri mongodb di Shell

  4. Tidak dapat menginstal driver php mongodb di mac os 10.9

  5. Kuota disk terlampaui pada OpenShift