आप $redact
का इस्तेमाल कर सकते हैं
इसे पूरा करने के लिए चरण। यह $sort
के इस्तेमाल से बचता है
और फिर एक $group
करना
या एक $unwind
।
$समूह
_id
. द्वारा और अधिकतमmax_num_sold
get प्राप्त करें प्रत्येक समूह के लिए, <का उपयोग करके समूह में सभी दस्तावेज़ जमा करें। कोड>$पुश ऑपरेटर।$redact
प्रति समूह उप दस्तावेज़ों में, केवल उन लोगों को रखते हुए जिनके पास अधिकतमmax_num_sold
. है उनकेnum_sold
. में
नमूना कोड:
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"]}},
])
परीक्षण डेटा:
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"}
])
परीक्षा परिणाम:
{
"_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"
}
]
}