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

$or selector saya dalam ekspresi kecocokan pemicu database tidak berfungsi pada tingkat kedua bersarang saat mengonfigurasi pemicu database

Jadi saya dapat mengatasi masalah ini dengan mengubah kueri untuk melihat bidang yang diperbarui pada saat yang sama tetapi tidak bersarang. Saya pikir masalah dengan memeriksa bidang bersarang adalah ChangeEvent updateDescription properti tidak berisi objek bersarang aktual yang telah berubah; melainkan berisi representasi titik-notasi dari perubahan. Jadi jika Anda melihat Pembaruan 2 di postingan saya, Anda akan melihat updatedFields memiliki nilai ini:{\"someOtherField\":310,\"message.fansNo\":1... bukannya {\"someOtherField\":310,\"message\":{\"fansNo\":1... . Dengan menggunakan message.fansNo dalam kueri $match, Mongo akan mencari bentuk objek ini:{\"message\":{\"fansNo\":1... , yang tidak cocok dalam kasus ini. Solusi "nyata" di sini adalah menghindari . di message.fansNo dalam ekspresi kecocokan saya, tetapi saya tidak dapat membuatnya berfungsi (lihat utas ini ).

Jadi "solusi" yang berhasil bagi saya sebenarnya hanyalah solusi yang berfungsi untuk kasus penggunaan khusus saya:kebetulan someOtherField selalu diperbarui bersama dengan message.fansNo , dan someOtherField tidak bersarang. Jadi saya bisa mencocokkan someOtherField tanpa khawatir bersarang. Pada dasarnya ekspresi kecocokan ini memberi saya hasil yang saya inginkan:

{
  "$or": [
    {
      "updateDescription.updatedFields.someOtherField": {"$exists":true}
    },
    {
      "updateDescription.updatedFields.someOtherField":{"$exists":true}
    }
  ]
}

Semoga ini bisa membantu orang lain!




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregasi Pymongo - meneruskan daftar python untuk agregasi

  2. daftar sub-item berulang yang elegan

  3. Tidak dapat Mendekode SubValue ObjectId dari hasil MongoDB di Golang

  4. arrayFilter di mongodb

  5. MongoDB Konversi String ke Array