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

Kueri rentang MongoDB pada seluruh nilai dokumen yang disematkan

Catat perintah beberapa baris di bawah dokumentasi yang Anda tautkan:

Ini memberi tahu Anda bahwa bidang yang tidak ada dan bidang yang disetel ke nol diperlakukan secara khusus.

Agar dokumen {} dan {a: null} agar setara dalam urutan pengurutan, algoritme pengurutan harus mempertimbangkan bidang pengurutan yang hilang untuk ada, dan memiliki nilai null .

Jika Anda secara eksplisit menambahkan bidang yang hilang, hanya untuk melihat tampilannya, pengurutannya lebih masuk akal.

Filter {tag: { $gte: { baz: MinKey() }}} diterapkan ke {_id: 1, tag: {bar: "BAR"}} pada dasarnya membandingkan {baz: MinKey()} dengan {baz: null, bar: "BAR"} .

Di dekat bagian atas dokumen yang Anda tautkan, tertulis bahwa MinKey kurang dari null , jadi itu urutan yang benar.

EDIT

Secara umum, kueri paling efisien ketika nama bidang bukan data itu sendiri. Dalam hal database tabular, kolom mana yang akan berisi "baz"?

Sedikit perubahan dalam skema akan menyederhanakan jenis kueri ini. Alih-alih {tagname: tagvalue} , gunakan {k:tagname, v:tagvalue} . Anda kemudian dapat mengindeks tag.k dan/atau tag.v , dan kueri di tag.k untuk menemukan semua dokumen dengan tag "baz", kueri tag dengan operasi ketidaksetaraan akan bekerja lebih intuitif.

db.collection.find({"tag.k":{$gte:"baz"}})

Pencocokan persis dapat dilakukan dengan elemMatch seperti

db.collection.find({tag: {$elemMatch:{k:"baz",v:"BAZ"}}})

Jika Anda benar-benar membutuhkan dokumen yang dikembalikan berisi {tagname: tagvalue} , $arrayToObject operator agregasi dapat melakukannya:

db.collection.aggregate([
  {$match: {
      "tag.k": {$gte: "baz"}
  }},
  {
    $addFields: {
      tag: {$arrayToObject: [["$tag"]]}
  }}
])

Taman bermain




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb tidak mungkin (?) E11000 duplikat kunci kesalahan kunci dup saat memasang

  2. com.mongodb.MongoException:tidak berbicara dengan master dan coba lagi habis

  3. Perbarui bidang di dalam daftar menggunakan driver MongoDB C#

  4. Dapatkan nilai berbeda dari array berdasarkan kondisi di dalam array

  5. Bagaimana saya bisa membujuk Spring Data untuk menunjukkan kepada saya rencana kueri mongo (alias cursor.explain())