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

Agregat Pymongo:memfilter berdasarkan jumlah bidang (dinamis)

Ya, Anda sekarang dapat menggunakan operator agregasi $objectToArray (SERVER-23310 ) untuk mengubah kunci menjadi nilai. Itu harus dapat menghitung jumlah bidang 'dinamis'. Menggabungkan operator ini dengan $addFields bisa sangat berguna.

Kedua operator tersedia di MongoDB v3.4.4+Menggunakan dokumen Anda di atas sebagai contoh:

db.sports.aggregate([
          { $addFields : 
             { "numFields" : 
               { $size:
                 { $objectToArray:"$$ROOT"}
               }
             }
          }, 
          { $match: 
            { numFields: 
              {$gt:2}
            }
          }
])

Pipa agregasi di atas, pertama-tama akan menambahkan bidang yang disebut numFields . Nilainya akan menjadi ukuran array. Array akan berisi jumlah bidang dalam dokumen. Tahap kedua akan menyaring hanya untuk 2 bidang dan lebih besar (dua bidang karena masih ada _id bidang ditambah name ).

Di PyMongo , pipa agregasi di atas akan terlihat seperti:

cursor = collection.aggregate([
                         {"$addFields":{"numFields":
                                         {"$size":{"$objectToArray":"$$ROOT"}}}}, 
                         {"$match":{"numFields":{"$gt":2}}}
         ])

Setelah mengatakan hal di atas, jika memungkinkan untuk kasus penggunaan Anda, saya sarankan untuk mempertimbangkan kembali model data Anda untuk akses yang lebih mudah. yaitu Tambahkan bidang baru untuk melacak jumlah olahraga saat posisi olahraga baru dimasukkan/ditambahkan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node MongoDb { err:'koneksi ke [127.0.0.1:27017] habis waktu' }

  2. Dorong elemen di posisi array apa pun di subdokumen

  3. Penjelasan Tanggal JSON

  4. Otomatiskan Pemeriksaan Kesehatan Basis Data

  5. Tidak dapat mengekstrak kunci geo, jenis GeoJSON tidak dikenal:{ koordinat:[ 13.42493130000003, 52.5074619999999 ]