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

Ambil sub-dokumen yang cocok dengan nilai maksimum dalam array

Cara terbaik yang optimal untuk melakukan ini adalah di MongoDB 3.2 atau yang lebih baru. Kita perlu $project dokumen kami dan gunakan $filter operator untuk mengembalikan subset dari larik "topicInfo" yang cocok dengan kondisi kita. Dan pada MongoDB3.2 , kita dapat menggunakan $max di $project tahap di cond ekspresi ition dan melakukan operasi logika pada nilai yang dikembalikan.

Tahap terakhir dalam pipeline adalah $match tahap di mana Anda memfilter dokumen tersebut dengan "topicInfo" kosong menggunakan $exists operator kueri elemen dan notasi titik untuk mengakses elemen pertama dalam array. Ini juga mengurangi jumlah data yang dikirim melalui kabel dan waktu serta memori yang digunakan untuk memecahkan kode dokumen di sisi klien.

db.collection.aggregate([
    { "$project": { 
        "topicInfo": { 
            "$filter": { 
                "input": "$topicInfo", 
                "as": "t", 
                "cond": { 
                    "$and": [ 
                        { "$eq": [ "$$t.topic", "topic2"] }, 
                        { "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
                    ] 
                } 
            } 
        } 
    }},
    { "$match": { "topicInfo.0": { "$exists": true } } }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB tidak menggunakan /etc/mongodb.conf setelah saya mengubah dbpath

  2. Ganti nama ObjectId _id menjadi id dalam deserialisasi jackson dengan Jongo dan MongoDB

  3. Dalam mongodb $match, cara menguji bidang MATCHING , daripada bidang EQUALING

  4. perbedaan mongodb remove() vs findOneAndDelete() vs deleteOne()

  5. Bidang tambahan ke koleksi yang ada