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

Peta MongoDB/kurangi beberapa koleksi?

Fungsi pengurangan dapat dipanggil sekali, dengan kunci dan semua nilai yang sesuai (tetapi hanya jika ada beberapa nilai untuk kunci - itu tidak akan dipanggil sama sekali jika hanya ada 1 nilai untuk kunci tersebut).

Ini juga dapat dipanggil beberapa kali, setiap kali dengan kunci dan hanya subset dari nilai yang sesuai , dan hasil pengurangan sebelumnya untuk kunci itu. Skenario ini disebut re-reduce . Untuk mendukung pengurangan ulang, fungsi pengurangan Anda harus idempoten.

Ada dua fitur utama dalam fungsi pengurangan idempoten:

  • Nilai hasil dari fungsi pengurangan harus dalam format yang sama dengan nilai dibutuhkan. Jadi, jika fungsi reduksi Anda menerima larik string, fungsi tersebut harus mengembalikan string. Jika menerima objek dengan beberapa properti, itu harus mengembalikan objek yang berisi properti yang sama. Ini memastikan bahwa fungsi tidak rusak saat dipanggil dengan hasil pengurangan sebelumnya.
  • Jangan berasumsi berdasarkan jumlah nilai dibutuhkan. Tidak dijamin bahwa values parameter berisi semua nilai untuk kunci yang diberikan. Jadi gunakan values.length dalam perhitungan sangat berisiko dan harus dihindari.

Pembaruan: Dua langkah di bawah ini tidak diperlukan (atau bahkan mungkin, saya belum memeriksanya) pada rilis MongoDB yang lebih baru. Sekarang ia dapat menangani langkah-langkah ini untuk Anda, jika Anda menentukan koleksi keluaran dalam opsi pengurangan peta:

{ out: { reduce: "tempResult" } }

Jika fungsi reduksi Anda idempoten, Anda seharusnya tidak mengalami masalah dalam mereduksi beberapa koleksi. Cukup kurangi kembali hasil setiap koleksi:

Langkah 1

Jalankan pengurangan peta pada setiap koleksi yang diperlukan dan simpan hasilnya dalam satu koleksi sementara. Anda dapat menyimpan hasilnya menggunakan fungsi finalisasi:

finalize = function (key, value) {
  db.tempResult.save({ _id: key, value: value });
}

db.someCollection.mapReduce(map, reduce, { finalize: finalize })
db.anotherCollection.mapReduce(map, reduce, { finalize: finalize })

Langkah 2

Jalankan pengurangan peta lain pada koleksi sementara, menggunakan fungsi pengurangan yang sama . Fungsi peta adalah fungsi sederhana yang memilih kunci dan nilai dari koleksi sementara:

map = function () {
  emit(this._id, this.value);
}

db.tempResult.mapReduce(map, reduce)

Pengurangan peta kedua ini pada dasarnya adalah pengurangan ulang dan akan memberikan hasil yang Anda butuhkan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Membuat spring-data-mongodb multi-tenant

  2. Periksa otentikasi MongoDB dengan driver Java 3.0

  3. Bagaimana cara terhubung dengan mongodb menggunakan sailsjs v0.10?

  4. MongoDB / Meteor / Ekspor MONGO_URL ke aplikasi yang digunakan

  5. Dapatkan dokumen dengan tag dalam daftar, diurutkan berdasarkan jumlah total kecocokan