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

MongoDB एग्रीगेशन में $unwind, $group और $project लागू करें

MongoDB एग्रीगेशन पाइपलाइन: $unwind, $group, $project का संयोजन

यह उदाहरण दर्शाता है कि कैसे $unwind, $group, और $project स्टेज्स को मिलाकर जटिल डेटा ट्रांसफॉर्मेशन किया जाता है।

ऑपरेटर्स का अवलोकन

  • $unwind: ऐरे फ़ील्ड को डी-कंस्ट्रक्ट करता है, प्रत्येक एलिमेंट के लिए एक दस्तावेज़ आउटपुट करता है
  • $group: निर्दिष्ट _id एक्सप्रेशन द्वारा इनपुट दस्तावेज़ों को ग्रुप करता है
  • $project: अनुरोधित फ़ील्ड्स के साथ दस्तावेज़ों को अगले स्टेज में पास करता है

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

> db.demo238.insertOne({
    "EmailId" : "John@gmail.com",
    "details" : [ { "Name" : "Bob", "isActive" : true } ]
});
> db.demo238.insertOne({
    "EmailId" : "Chris@gmail.com",
    "details" : [ { "Name" : "David" } ]
});
> db.demo238.insertOne({
    "EmailId" : "Mike@gmail.com",
    "details" : [ { "Name" : "Carol", "isActive" : true } ]
});

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

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

आउटपुट:

{ "_id" : ObjectId("5e4418e3f4cebbeaebec5152"), "EmailId" : "John@gmail.com", "details" : [ { "Name" : "Bob", "isActive" : true } ] }
{ "_id" : ObjectId("5e4418e3f4cebbeaebec5153"), "EmailId" : "Chris@gmail.com", "details" : [ { "Name" : "David" } ] }
{ "_id" : ObjectId("5e4418e4f4cebbeaebec5154"), "EmailId" : "Mike@gmail.com", "details" : [ { "Name" : "Carol", "isActive" : true } ] }

एग्रीगेशन पाइपलाइन: एक्टिव यूज़र्स खोजें

> db.demo238.aggregate([
    { "$match": { "details.isActive": true } },      // 1. केवल एक्टिव वाले दस्तावेज़ फ़िल्टर करें
    { "$unwind": "$details" },                       // 2. details ऐरे को फ्लैट करें
    { "$match": { "details.isActive": true } },      // 3. फिर से फ़िल्टर करें (unwind के बाद)
    { "$group": {
        "_id": "$details.Name",
        "active": { "$first": "$_id" }
    }}
]);

आउटपुट:

{ "_id" : "Carol", "active" : ObjectId("5e4418e4f4cebbeaebec5154") }
{ "_id" : "Bob", "active" : ObjectId("5e4418e3f4cebbeaebec5152") }

चरण-दर-चरण स्पष्टीकरण

  1. पहला $match: दस्तावेज़ स्तर पर फ़िल्टर करता है - केवल वे दस्तावेज़ जिनमें कम से कम एक एक्टिव डिटेल हो
  2. $unwind: प्रत्येक details एलिमेंट के लिए अलग दस्तावेज़ बनाता है
  3. दूसरा $match: unwind के बाद, केवल एक्टिव डिटेल्स वाले दस्तावेज़ रखता है
  4. $group: Name द्वारा ग्रुप करता है, मूल दस्तावेज़ का _id लेता है

सुधार: $project जोड़ना

> db.demo238.aggregate([
    { "$match": { "details.isActive": true } },
    { "$unwind": "$details" },
    { "$match": { "details.isActive": true } },
    { "$group": { "_id": "$details.Name", "active": { "$first": "$_id" } } },
    { "$project": { "_id": 0, "Name": "$_id", "DocumentId": "$active" } }
]);

आउटपुट: { "Name" : "Carol", "DocumentId" : ObjectId("...") }

  1. - MongoDB में Hour द्वारा Aggregate और $avg करना

    Aggregate करने के लिए MongoDB में aggregate() का उपयोग करें। यह collection में data के aggregate values calculate करता है। Collection बनाना > db.demo544.insertOne({DueTime:new ISODate(2020-01-10 12:10:20),Amount:100}); { acknowledged : true, insertedId : ObjectId(5e8e1f029e5f92834d7f05ce) } >

  1. - MongoDB एग्रीगेशन: दस्तावेज और ऐरे एलिमेंट्स से औसत प्राप्त करें

    इसके लिए, $avg के साथ $group और aggregate() का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo598.insertOne({ Information:Student, id:100, details:[ {Name:Chris,Marks:75}, {Name:Bob,Marks:55} ] }); { acknowledged : true, insertedId : ObjectId(5e9

  1. - MongoDB Aggregate एकाधिक परिणाम ग्रुप करें?

    एकाधिक परिणाम एग्रीगेट करने के लिए MongoDB में $group का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo765.insertOne( { Name:John, Category:ComputerScience, SubjectName:MongoDB, Marks:75 } ); { acknowledged : true, insertedId : ObjectId(5eb054525637cd592b2a4b01) } > db.demo765.insertOne( { N