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

MongoDB Mencocokkan array dengan $type?

Sebenarnya ada "gotcha" yang tercantum dalam dokumentasi untuk $type khusus tentang array:

Saat diterapkan ke array, $type cocok dengan elemen dalam apa pun yang bertipe tertentu. Tanpa proyeksi ini berarti bahwa seluruh array akan cocok jika ada elemen yang memiliki tipe yang tepat. Dengan proyeksi, hasilnya hanya akan mencakup elemen-elemen dari jenis yang diminta.

Jadi itu berarti bahwa alih-alih mendeteksi apakah "elemen itu sendiri" ada dalam larik, yang sebenarnya sedang diuji adalah "elemen dalam" larik untuk melihat jenisnya.

Sekarang dokumentasi itu sendiri menyarankan pengujian JavaScript ini dengan $where :

.find({ "$where": "return Array.isArray(this.author)" })

Tapi saya pikir itu cukup mengerikan karena ada cara yang lebih baik.

Caranya ada di "notasi titik", di mana Anda meminta 0 indeks elemen larik ke $exists

.find({ "author.0": { "$exists": true } })

Yang merupakan kasus dasar bahwa jika elemen "0" ada, maka bidang tersebut ada dan oleh karena itu datanya adalah sebuah array.

Setelah Anda memahami premis logis itu, itu adalah tes yang cukup sederhana. Satu-satunya hal yang tidak dapat dicocokkan dengan itu adalah larik "benar-benar kosong", dalam hal ini Anda dapat kembali ke alternatif JavaScript jika diperlukan. Tapi ini sebenarnya bisa menggunakan indeks, jadi lebih baik menggunakan bentuk yang terakhir.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $min Agregasi Pipeline Operator

  2. Alat MongoDB Dari Komunitas yang Melengkapi ClusterControl

  3. MongoSocketReadException:Mencapai akhir aliran sebelum waktunya (setelah periode tidak aktif)

  4. Perbarui nilai di MongoDB berdasarkan nilainya saat ini

  5. Menyimpan dan mengambil objek JavaScript di/dari MongoDB