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

MongoDB में सबडॉक्यूमेंट मैच द्वारा कैसे सॉर्ट करें?

MongoDB एग्रीगेशन का उपयोग करके सबडॉक्यूमेंट फील्ड द्वारा सॉर्ट करना

एम्बेडेड डॉक्यूमेंट्स के ऐरे के अंदर एक फील्ड द्वारा डॉक्यूमेंट्स को सॉर्ट करने के लिए, ऐरे को अनविंड करने, वांछित सबडॉक्यूमेंट्स को फ़िल्टर करने, और फिर सॉर्ट करने के लिए एग्रीगेशन पाइपलाइन का उपयोग करें।

नमूना डेटा बनाना

> db.sortBySubDocumentsDemo.insertOne(
  {
    "StudentName": "Chris",
    "StudentDetails": [
      { "Age":21, "StudentScore":91 },
      { "Age":22, "StudentScore":99 },
      { "Age":21, "StudentScore":93 }
    ]
  }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd57e297924bb85b3f48942") }

> db.sortBySubDocumentsDemo.insertOne(
  {
    "StudentName": "Robert",
    "StudentDetails": [
      { "Age":24, "StudentScore":78 },
      { "Age":21, "StudentScore":86 },
      { "Age":23, "StudentScore":45 }
    ]
  }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd57e4c7924bb85b3f48943") }

सभी डॉक्यूमेंट्स देखना

> db.sortBySubDocumentsDemo.find().pretty();

आउटपुट:

{ "_id" : ObjectId("5cd57e297924bb85b3f48942"), "StudentName" : "Chris", "StudentDetails" : [ { "Age" : 21, "StudentScore" : 91 }, { "Age" : 22, "StudentScore" : 99 }, { "Age" : 21, "StudentScore" : 93 } ] }
{ "_id" : ObjectId("5cd57e4c7924bb85b3f48943"), "StudentName" : "Robert", "StudentDetails" : [ { "Age" : 24, "StudentScore" : 78 }, { "Age" : 21, "StudentScore" : 86 }, { "Age" : 23, "StudentScore" : 45 } ] }

उम्र 21 वाले सबडॉक्यूमेंट्स द्वारा सॉर्ट करना

> db.sortBySubDocumentsDemo.aggregate([
  { $match: { 'StudentDetails.Age': 21 } },
  { $unwind: '$StudentDetails' },
  { $match: { 'StudentDetails.Age': 21 } },
  { $project: { _id: 0, "StudentName": 1, 'StudentDetails.StudentScore': 1 } },
  { $sort: { 'StudentDetails.StudentScore': 1 } },
  { $limit: 5 }
]);

आउटपुट:

{ "StudentName" : "Robert", "StudentDetails" : { "StudentScore" : 86 } }
{ "StudentName" : "Chris", "StudentDetails" : { "StudentScore" : 91 } }
{ "StudentName" : "Chris", "StudentDetails" : { "StudentScore" : 93 } }

पाइपलाइन व्याख्या

  1. $match - केवल उन डॉक्यूमेंट्स को फ़िल्टर करता है जहां कम से कम एक सबडॉक्यूमेंट में Age=21 है।
  2. $unwind - StudentDetails ऐरे को डी-कंस्ट्रक्ट करता है, प्रत्येक सबडॉक्यूमेंट के लिए अलग डॉक्यूमेंट आउटपुट करता है।
  3. $match - फिर से Age=21 वाले केवल सबडॉक्यूमेंट्स को फ़िल्टर करता है।
  4. $project - केवल StudentName और StudentScore आउटपुट करता है।
  5. $sort - StudentScore द्वारा आरोही क्रम में सॉर्ट करता है (1 = आरोही, -1 = अवरोही)।
  6. $limit - परिणामों को 5 डॉक्यूमेंट्स तक सीमित करता है।

मुख्य बिंदु

  • सबडॉक्यूमेंट फील्ड्स द्वारा सॉर्ट करने के लिए $unwind आवश्यक है।
  • प्रारंभिक $match (अनविंड से पहले) इंडेक्स का उपयोग कर सकता है और प्रोसेस किए गए डॉक्यूमेंट्स को कम करता है।
  • दूसरा $match (अनविंड के बाद) केवल प्रासंगिक सबडॉक्यूमेंट्स को फ़िल्टर करता है।
  • बड़े ऐरे के लिए प्रदर्शन पर विचार करें - अनविंड डॉक्यूमेंट काउंट को गुणा करता है।
  1. - MongoDB में Natural Sort करना

    MongoDB में natural sort के लिए $natural का उपयोग करें। Collection बनाना > db.demo684.insertOne({Value:10}); { acknowledged : true, insertedId : ObjectId(5ea530cea7e81adc6a0b3957) } > db.demo684.insertOne({Value:50}); { acknowledged : true, insertedId : ObjectId(5ea530d1a7e81adc6a0b3958) } &g

  1. - MongoDB क्वेरी: सबडॉक्यूमेंट की सरणी के भाग के रूप में _id सरणी में मौजूद डॉक्यूमेंट्स से मिलान करें

    आइए डॉक्यूमेंट्स के साथ एक कलेक्शन बनाते हैं: > db.demo568.insertOne({ _id: 101, details: [ {id : 101 }, { id:103 } ] }); { acknowledged : true, insertedId : 101 } find() से सभी डॉक्यूमेंट्स देखें: > db.demo568.find(); आउटपुट: { _id : 101, details : [ { id : 101 }, { id : 103 } ] } दूसरा कलेक

  1. - MongoDB कलेक्शन को ऐरे वैल्यू द्वारा सॉर्ट करें

    MongoDB कलेक्शन को ऐरे वैल्यू द्वारा सॉर्ट करने के लिए, $sort के साथ aggregate() का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo577.insertOne({ student: { details: [ { Name:Chris, Score:45 }, { Name:Bob, Score:33 }, { Name:Davi