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" }
चरण-दर-चरण
$match: {StudentSubject: {$ne: null}}- केवल नॉन-NULL सब्जेक्ट वाले डॉक्यूमेंट पास करता है (102, 103)$group: {_id: "$StudentName", StudentSubject: {$first: "$StudentSubject"}}- नाम से ग्रुप करके पहला वैल्यू लेता है- परिणाम: पहला नॉन-NULL सब्जेक्ट "MongoDB"
बिना $match के परिणाम (तुलना)
> db.conditionalFirstDemo.aggregate([
{$group: {_id: "$StudentName", StudentSubject: {$first: "$StudentSubject"}}}
]);
{ "_id": "Chris", "StudentSubject": null } // पहला डॉक्यूमेंट का NULL मिला
उपयोग के मामले
- प्रत्येक ग्रुप का पहला वैलिड (नॉन-NULL) रिकॉर्ड चाहिए
- टाइम सीरीज में पहला वैलिड मेजरमेंट
- लेटेस्ट नॉन-एम्प्टी स्टेटस