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

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

MongoDB एग्रीगेशन में नेस्टेड ऐरे एलिमेंट्स द्वारा सॉर्टिंग

जब दस्तावेज़ों में ऐरे ऑफ ऑब्जेक्ट्स होता है, तो ऐरे एलिमेंट्स के फ़ील्ड्स द्वारा दस्तावेज़ों को सॉर्ट करने के लिए $unwind, $sort, और $group का उपयोग करें।

सैंपल डेटा बनाना

> db.demo245.insertOne({
    _id: 101,
    details: [
        { "DueDate": new ISODate("2019-01-10"), "Value": 45 },
        { "DueDate": new ISODate("2019-11-10"), "Value": 34 }
    ]
});
> db.demo245.insertOne({
    _id: 102,
    details: [
        { "DueDate": new ISODate("2019-12-11"), "Value": 29 },
        { "DueDate": new ISODate("2019-03-10"), "Value": 78 }
    ]
});

दस्तावेज़ देखना

> db.demo245.find();

आउटपुट (नोट: पहले दस्तावेज़ में टाइपो "deatils" है):


एग्रीगेशन: Value द्वारा डिसेंडिंग सॉर्ट करके ऐरे को पुनर्व्यवस्थित करें

> db.demo245.aggregate([
    { "$unwind": "$details" },
    { "$sort": { "_id": 1, "details.Value": -1 } },
    { "$group": {
        "_id": "$_id",
        "details": { "$push": "$details" }
    }},
    { "$sort": { "details.Value": -1 } }
]);

आउटपुट (प्रत्येक दस्तावेज़ का ऐरे Value द्वारा डिसेंडिंग सॉर्टेड, फिर दस्तावेज़ भी Value द्वारा सॉर्टेड):


नोट: टाइपो और परिणाम

  • पहले दस्तावेज़ में फ़ील्ड नाम deatils (टाइपो) है न कि details
  • $unwind "$details" केवल दूसरे दस्तावेज़ (102) को प्रोसेस करता है क्योंकि पहले में "details" फ़ील्ड नहीं है
  • यही कारण है कि आउटपुट में केवल _id: 102 है

सही डेटा के लिए संशोधित क्वेरी

> // दोनों फ़ील्ड नामों को हैंडल करने के लिए
> db.demo245.aggregate([
    { $project: { details: { $concatArrays: ["$details", "$deatils"] } } },
    { $unwind: "$details" },
    { $sort: { "details.Value": -1 } },
    { $group: { _id: "$_id", details: { $push: "$details" } } }
]);

MongoDB 5.2+ में $sortArray

> db.demo245.aggregate([
    { $project: {
        details: { $sortArray: { input: { $concatArrays: ["$details", "$deatils"] }, sortBy: { Value: -1 } } }
    }}
]);
  1. - MongoDB में Subdocument को Document से Remove करना

    Document से subdocument remove करने के लिए $pull operator का उपयोग update() के साथ करें। आइए पहले documents के साथ एक collection बनाते हैं: > db.demo538.insertOne( ... { ... id:101, ... details : ... { ... anotherDetails: ... [ ... { ... Name:Chris, ... Age:21

  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 कलेक्शन को ऐरे वैल्यू द्वारा सॉर्ट करें

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