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

mongodb $where kueri untuk mengambil konten sub-dokumen

Menggunakan $where operator harus dihindari dalam banyak kasus karena keduanya akan menjalankan pemindaian koleksi lengkap terlepas dari kondisi lain apa yang mungkin menggunakan pemilihan indeks.

Selain itu, Anda menggunakan juru bahasa JavaScript untuk setiap dokumen hasil, yang akan jauh lebih lambat daripada kode asli. Baca peringatan di halaman manual, itu ada karena suatu alasan

Jika memungkinkan, coba gunakan .aggregate() untuk jenis perbandingan ini sebagai gantinya. Dalam kasus Anda, ini jelas merupakan pilihan yang lebih baik:

db.foo.aggregate([
    { "$match": { "flag": true } },
    { "$unwind": "$versions" },
    { "$project": {
        "versions": "$versions"
        "same": { "$eq": [ "$versions.version", "$defaultVersion" ] }
    }}
    { "$match": { "same": true } },
    { "$project": {
        "_id": 0,
        "versions": 1
    }}
])

Ini memungkinkan Anda untuk memfilter kueri Anda terlebih dahulu dengan kondisi "bendera" dan kemudian memeriksa setiap anggota larik untuk membandingkan apakah kedua bidang tersebut sama.

Jika perlu, Anda dapat memutar kembali elemen larik yang cocok ke dalam larik yang memiliki lebih dari satu kecocokan. Tapi saya rasa itu bukan kebutuhan Anda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Penyatuan koneksi di Spring Boot dan mongo db

  2. Proyeksikan elemen yang dikembalikan dengan $arrayElemAt

  3. Pipa agregasi Mongodb cara membatasi push grup

  4. Cara menulis aplikasi python yang mendukung banyak database

  5. Bersantai lalu Agregasi grup di MongoDB C #