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

Operator kueri $expr tampaknya tidak berfungsi dengan notasi titik array

$expr memungkinkan penggunaan Operator Ekspresi Agregasi hanya . Notasi titik yang Anda gunakan tidak akan berfungsi untuk mengakses elemen larik untuk bidang "values" : [ 1 ] . Anda perlu menggunakan $arrayElemAt operator, dan berfungsi dengan baik.

Kode Anda find({$expr: {$eq: ["$value1", "$value2"]}}) bekerja, karena $expr menggunakan operator ekspresi agregasi $eq , tidak operator MongoDB Query Language (MQL) $eq . Perhatikan bahwa kedua operator terlihat sama, tetapi penggunaan dan sintaksnya berbeda.

Dan, kode find({$expr: {$eq: ["$value1", "$values.0"]}}) tidak bekerja - seperti yang diharapkan. Di operator agregasi $values.0 , 0 ditafsirkan sebagai nama bidang, bukan indeks bidang larik.

Notasi titik berfungsi dengan baik di $expr juga. Berikut ini contohnya, dengan contoh dokumen:

{ "_id" : 1, "val" : { "0" : 99, "a" : 11 } }

Sekarang menggunakan $expr dan notasi titik:

db.test.find({ $expr: { $eq: [ "$val.0", 99 ]  } } )
db.test.find({ $expr: { $eq: [ "$val.a", 11 ]  } } )

Kedua kueri mengembalikan dokumen - kecocokan terjadi dengan filter menggunakan $expr dan notasi titik. Namun, ini hanya berlaku untuk dokumen yang disematkan (atau sub) tidak dengan bidang array.

Dari dokumentasi, Operator Agregasi Pipeline mengatakan:

ekspresi :




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Golang / MGO -- panik:tidak ada server yang dapat dijangkau

  2. Mengapa bidang multi-nilai adalah ide yang buruk dalam basis data relasional

  3. Cara menghapus kolom dari koleksi anak

  4. Cara menghapus konsol di MongoDB

  5. Bagaimana mencegah MongoDB mengembalikan ID objek saat menemukan dokumen?