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

Bagaimana cara mengelompokkan dan memilih dokumen yang sesuai dengan maks dalam setiap grup di MongoDB?

Anda dapat menggunakan $redact tahap untuk mencapai ini. Ini menghindari penggunaan $sort lalu lakukan lagi $group atau $unwind .

  • $group oleh _id dan dapatkan max_num_sold maksimum untuk setiap grup, kumpulkan semua dokumen dalam grup menggunakan $push operator.
  • $redact ke dalam sub dokumen per grup, hanya menyimpan yang memiliki max_num_sold maximum maksimum di num_sold . mereka

kode contoh:

db.getCollection('sales').aggregate([
{$group:{"_id":"$hash",
         "max_num_sold":{$max:"$num_sold"},
         "records":{$push:"$$ROOT"}}},
{$redact:{$cond:[{$eq:[{$ifNull:["$num_sold","$$ROOT.max_num_sold"]},
                       "$$ROOT.max_num_sold"]},
                "$$DESCEND","$$PRUNE"]}},
])

data uji:

db.getCollection('sales').insert([
{"title":"Foo","hash":17,"num_sold":49,"place":"ABC"},
{"title":"Bar","hash":18,"num_sold":55,"place":"CDF"},
{"title":"Baz","hash":17,"num_sold":55,"place":"JKN"},
{"title":"Spam","hash":17,"num_sold":20,"place":"ZSD"},
{"title":"Eggs","hash":18,"num_sold":20,"place":"ZDF"}
])

hasil tes:

{
        "_id" : 18,
        "max_num_sold" : 55,
        "records" : [
                {
                        "_id" : ObjectId("567874f2b506fc2193a22696"),
                        "title" : "Bar",
                        "hash" : 18,
                        "num_sold" : 55,
                        "place" : "CDF"
                }
        ]
}
{
        "_id" : 17,
        "max_num_sold" : 55,
        "records" : [
                {
                        "_id" : ObjectId("567874f2b506fc2193a22697"),
                        "title" : "Baz",
                        "hash" : 17,
                        "num_sold" : 55,
                        "place" : "JKN"
                }
        ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cara meneruskan variabel ke regex

  2. Terhubung ke MongoDB gagal saat menggunakan .NET Core yang berjalan di Linux

  3. Mongodb:gagal terhubung ke server pada koneksi pertama

  4. Buat kombinasi dua bidang unik dalam koleksi saya

  5. Kembalikan rangkaian hasil panggilan balik yang dipanggil dalam satu lingkaran