Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में सिंगल एग्रीगेशन क्वेरी में सॉर्ट और ग्रुप कैसे करें?

MongoDB में एक ही एग्रीगेशन पाइपलाइन में ग्रुपिंग और सॉर्टिंग करने के लिए $group के बाद $sort स्टेज का उपयोग करें।

उदाहरण

उत्पाद और कीमत वाले दस्तावेज़ बनाएं:

> db.sortAndGroupDemo.insertOne({Price: 40, Product: 10});
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e907") }
> db.sortAndGroupDemo.insertOne({Price: 100, Product: 10});
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e908") }
> db.sortAndGroupDemo.insertOne({Price: 90, Product: 20});
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e909") }
> db.sortAndGroupDemo.insertOne({Price: 200, Product: 10});
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e90a") }
> db.sortAndGroupDemo.insertOne({Price: 70, Product: 20});
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bc78f00858fb12e90b") }
> db.sortAndGroupDemo.insertOne({Price: 70, Product: 30});
{ "acknowledged" : true, "insertedId" : ObjectId("5ce8f2bd78f00858fb12e90c") }

सभी दस्तावेज़ देखें:

> db.sortAndGroupDemo.find().pretty();
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e907"), "Price" : 40, "Product" : 10 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e908"), "Price" : 100, "Product" : 10 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e909"), "Price" : 90, "Product" : 20 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e90a"), "Price" : 200, "Product" : 10 }
{ "_id" : ObjectId("5ce8f2bc78f00858fb12e90b"), "Price" : 70, "Product" : 20 }
{ "_id" : ObjectId("5ce8f2bd78f00858fb12e90c"), "Price" : 70, "Product" : 30 }

Product द्वारा ग्रुप करके कीमत आरोही क्रम में सॉर्ट

> db.sortAndGroupDemo.aggregate([
  {$group: {_id: "$Product"}},
  {$sort: {Price: 1}},
  {$project: {_id: 1}}
]);

आउटपुट:

{ "_id" : 30 }
{ "_id" : 20 }
{ "_id" : 10 }

महत्वपूर्ण समस्या: इस क्वेरी में $sort के समय Price फील्ड उपलब्ध नहीं है क्योंकि $group में केवल _id रखा गया है।

सही तरीका: ग्रुपिंग में एग्रीगेशन शामिल करें

db.sortAndGroupDemo.aggregate([
  {$group: {
    _id: "$Product",
    minPrice: {$min: "$Price"},
    maxPrice: {$max: "$Price"},
    avgPrice: {$avg: "$Price"}
  }},
  {$sort: {minPrice: 1}},
  {$project: {_id: 1, minPrice: 1, maxPrice: 1, avgPrice: 1}}
]);

संभावित आउटपुट:

{ "_id" : 30, "minPrice" : 70, "maxPrice" : 70, "avgPrice" : 70 }
{ "_id" : 20, "minPrice" : 70, "maxPrice" : 90, "avgPrice" : 80 }
{ "_id" : 10, "minPrice" : 40, "maxPrice" : 200, "avgPrice" : 110 }

पाइपलाइन क्रम:

  1. $match - फिल्टर (पहले करें, दस्तावेज़ कम करें)
  2. $group - ग्रुपिंग और एग्रीगेशन
  3. $sort - ग्रुप परिणाम सॉर्ट करें
  4. $project - आउटपुट फॉर्मेट
  5. $limit/$skip - पेजिनेशन

नोट: $sort से पहले $group करें, अन्यथा सॉर्टिंग व्यक्तिगत दस्तावेज़ों पर होगी न कि ग्रुप पर।

  1. - MongoDB में नेस्टेड सरणी को कैसे सॉर्ट करें?

    MongoDB में नेस्टेड सरणी को सॉर्ट करने के लिए, $sort का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo505.insertOne( { details: [ { Name:Chris, Score:58 }, { Name:Bob, Score:45 }, { Name:John, Score:68 }, { Name:David, Score:46 } ] }); { ackn

  1. - MongoDB में _id द्वारा समूह कैसे बनाएं

    MongoDB में _id द्वारा समूह बनाने के लिए, $group का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo529.insertOne({Score:10}); { acknowledged : true, insertedId : ObjectId(5e8b1d5bef4dcbee04fbbbe4) } > db.demo529.insertOne({Score:20}); { acknowledged : true, insertedId : ObjectId(

  1. - MongoDB एग्रीगेशन और प्रोजेक्शन

    इसके लिए aggregate() के साथ $project का उपयोग करें। एग्रीगेशन में $project पाइपलाइन में अगले चरण के लिए अनुरोधित फील्ड्स के साथ डॉक्यूमेंट्स को पास करता है। आइए एक कलेक्शन बनाते हैं: > db.demo762.insertOne({ _id : { userId:101, userName:Chris }, countryName : US, details : [ { Name : Robert, Due