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

MongoDB एग्रीगेशन में $match से NULL इग्नोर करके $first प्राप्त करें

MongoDB एग्रीगेशन: $match से NULL फ़िल्टर करके $first लेना

$match स्टेज से NULL वैल्यू वाले डॉक्यूमेंट बाहर करके, फिर $group में $first से पहला नॉन-NULL वैल्यू प्राप्त करें।

कलेक्शन बनाएं और डॉक्यूमेंट इन्सर्ट करें

> db.conditionalFirstDemo.insertOne({_id: 100, "StudentName": "Chris", "StudentSubject": null});
{ "acknowledged": true, "insertedId": 100 }
> db.conditionalFirstDemo.insertOne({_id: 101, "StudentName": "Chris", "StudentSubject": null});
{ "acknowledged": true, "insertedId": 101 }
> db.conditionalFirstDemo.insertOne({_id: 102, "StudentName": "Chris", "StudentSubject": "MongoDB"});
{ "acknowledged": true, "insertedId": 102 }
> db.conditionalFirstDemo.insertOne({_id: 103, "StudentName": "Chris", "StudentSubject": "MongoDB"});
{ "acknowledged": true, "insertedId": 103 }
> db.conditionalFirstDemo.insertOne({_id: 104, "StudentName": "Chris", "StudentSubject": null});
{ "acknowledged": true, "insertedId": 104 }

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

> db.conditionalFirstDemo.find();
{ "_id": 100, "StudentName": "Chris", "StudentSubject": null }
{ "_id": 101, "StudentName": "Chris", "StudentSubject": null }
{ "_id": 102, "StudentName": "Chris", "StudentSubject": "MongoDB" }
{ "_id": 103, "StudentName": "Chris", "StudentSubject": "MongoDB" }
{ "_id": 104, "StudentName": "Chris", "StudentSubject": null }

$match से NULL बाहर करें, फिर $first लें

> db.conditionalFirstDemo.aggregate([
  {$match: {"StudentSubject": {$ne: null}}},
  {$group: {"_id": "$StudentName", "StudentSubject": {$first: "$StudentSubject"}}}
]);
{ "_id": "Chris", "StudentSubject": "MongoDB" }

चरण-दर-चरण

  1. $match: {StudentSubject: {$ne: null}} - केवल नॉन-NULL सब्जेक्ट वाले डॉक्यूमेंट पास करता है (102, 103)
  2. $group: {_id: "$StudentName", StudentSubject: {$first: "$StudentSubject"}} - नाम से ग्रुप करके पहला वैल्यू लेता है
  3. परिणाम: पहला नॉन-NULL सब्जेक्ट "MongoDB"

बिना $match के परिणाम (तुलना)

> db.conditionalFirstDemo.aggregate([
  {$group: {_id: "$StudentName", StudentSubject: {$first: "$StudentSubject"}}}
]);
{ "_id": "Chris", "StudentSubject": null }  // पहला डॉक्यूमेंट का NULL मिला

उपयोग के मामले

  • प्रत्येक ग्रुप का पहला वैलिड (नॉन-NULL) रिकॉर्ड चाहिए
  • टाइम सीरीज में पहला वैलिड मेजरमेंट
  • लेटेस्ट नॉन-एम्प्टी स्टेटस
  1. - MongoDB एग्रीगेशन में मल्टीपल फ़ील्ड्स द्वारा काउंट करना

    एक ही पाइपलाइन में कई फ़ील्ड्स पर काउंट करने के लिए $facet का उपयोग करें। डेमो डेटा db.demo721.insertOne({ details1: { id:101 }, details2: { id:101 }, details3: { id:101 } }); db.demo721.insertOne({ details1: { id:101 }, details2: { id:102 }, details3: { id:102 } }); क्वेरी

  1. - MongoDB में नॉट नल की जांच कैसे करें?

    नॉट नल की जांच के लिए $ne का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo764.insertOne({LoginUserName:Chris,LoginPassword:Chris_12}); { acknowledged : true, insertedId : ObjectId(5eb04ee55637cd592b2a4afc) } > db.demo764.insertOne({LoginUserName:Chris,LoginPassword:null}); { acknowledged :

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

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