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

mongo db agregat mengacak ( shuffle ) hasil

Khusus untuk kerangka agregasi itu sendiri sebenarnya tidak ada cara asli karena belum ada operator yang tersedia untuk melakukan sesuatu seperti menghasilkan angka acak. Jadi, kecocokan apa pun yang dapat Anda proyeksikan di bidang yang akan diurutkan tidak akan "benar-benar acak" karena kurangnya nilai benih yang bergeser.

Pendekatan yang lebih baik adalah dengan "mengacak" hasil sebagai array setelah hasilnya dikembalikan. Ada berbagai implementasi "shuffle", berikut ini salah satunya untuk JavaScript:

function shuffle(array) {
   var currentIndex = array.length
    , temporaryValue
    , randomIndex
    ;

  while (0 !== currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

Tetapi jika Anda benar-benar berbicara tentang mengacak sejumlah besar hasil seperti dalam kumpulan yang diperoleh dari penggunaan $out operator atau koleksi apa pun, maka Anda dapat "menipu" dengan menggunakan mapReduce.

db.collection.mapReduce(
    function(){
        var random = Math.floor( Math.random() * 100000 );
        emit({ rand: random, id: this._id }, this );
    },
    function(){},
    { out: { replace: "newcollection" } }
);

Ini mengambil keuntungan dari sifat mapReduce di mana nilai kunci selalu diurutkan. Jadi dengan memasukkan angka acak sebagai bagian awal dari kunci maka Anda akan selalu mendapatkan hasil yang diurutkan secara acak.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. TypeError:Tidak dapat menggunakan operator 'in' untuk menelusuri '_id' di [{}]

  2. Pagination MongoDB pada array - Periksa apakah $slice mencapai awal array

  3. Kompres (persingkat) string PHP dari 24 karakter menjadi 20

  4. Cara mendapatkan data data Mongo menggunakan agregat MongoDB

  5. MongoSkin Tidak dapat membaca properti 'berlaku' dari undefined