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

MongoDB में विशिष्ट मान न रखने वाले ऐरे एलिमेंट्स वाले दस्तावेज़ खोजें

MongoDB में $elemMatch का उपयोग करके ऐरे एलिमेंट्स फ़िल्टर करना

$elemMatch ऑपरेटर उन दस्तावेज़ों से मेल खाता है जिनमें एक ऐरे फ़ील्ड होता है जिसमें कम से कम एक एलिमेंट सभी निर्दिष्ट क्वेरी मानदंडों से मेल खाता है।

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

> db.demo239.insertOne({
    "Name" : "Chris",
    "details" : [
        { "DueDate" : new ISODate("2019-01-21"), "ProductPrice" : 1270 },
        { "DueDate" : new ISODate("2020-02-12"), "ProductPrice" : 2000 }
    ]
});
> db.demo239.insertOne({
    "Name" : "David",
    "details" : [
        { "DueDate" : new ISODate("2018-11-11"), "ProductPrice" : 1450 },
        { "DueDate" : new ISODate("2020-02-12") }  // ProductPrice गायब है
    ]
});

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

> db.demo239.find();

आउटपुट:

{ "_id" : ObjectId("5e441c6bf4cebbeaebec5157"), "Name" : "Chris", "details" : [
    { "DueDate" : ISODate("2019-01-21T00:00:00Z"), "ProductPrice" : 1270 },
    { "DueDate" : ISODate("2020-02-12T00:00:00Z"), "ProductPrice" : 2000 }
] }
{ "_id" : ObjectId("5e441c6cf4cebbeaebec5158"), "Name" : "David", "details" : [
    { "DueDate" : ISODate("2018-11-11T00:00:00Z"), "ProductPrice" : 1450 },
    { "DueDate" : ISODate("2020-02-12T00:00:00Z") }  // ProductPrice फ़ील्ड अनुपस्थित
] }

क्वेरी: ProductPrice फ़ील्ड न रखने वाले एलिमेंट्स वाले दस्तावेज़ खोजें

> db.demo239.find({
    "details": {
        "$elemMatch": {
            "DueDate": { "$exists": true },
            "ProductPrice": { "$exists": false }
        }
    }
})

आउटपुट (केवल David का दस्तावेज़ जिसमें एक एलिमेंट ProductPrice के बिना है):

{ "_id" : ObjectId("5e441c6cf4cebbeaebec5158"), "Name" : "David", "details" : [
    { "DueDate" : ISODate("2018-11-11T00:00:00Z"), "ProductPrice" : 1450 },
    { "DueDate" : ISODate("2020-02-12T00:00:00Z") }
] }

$elemMatch क्यों आवश्यक है?

$elemMatch के बिना, क्वेरी { "details.DueDate": { $exists: true }, "details.ProductPrice": { $exists: false } } अलग-अलग ऐरे एलिमेंट्स से शर्तों को पूरा कर सकती है (एक एलिमेंट में DueDate हो और दूसरे में ProductPrice न हो)। $elemMatch सुनिश्चित करता है कि एक ही एलिमेंट दोनों शर्तों को पूरा करे।

अन्य उपयोगी पैटर्न

  • { $elemMatch: { field: { $exists: false } } } - गायब फ़ील्ड वाले एलिमेंट्स
  • { $elemMatch: { field: null } } - null मान वाले एलिमेंट्स
  • { $elemMatch: { field: { $gt: 100 } } } - शर्त पूरी करने वाले एलिमेंट्स
  1. - MongoDB दस्तावेज़ों में विशिष्ट फ़ील्ड के ऐरे एलिमेंट्स काउंट करना

    किसी फ़ील्ड में ऐरे एलिमेंट्स की संख्या गिनने के लिए $size ऑपरेटर का उपयोग करें। डेमो डेटा > db.demo723.insertOne({Subject:[MySQL,MongoDB]}); > db.demo723.insertOne({Subject:[C]}); > db.demo723.insertOne({Subject:[C++,Java,Python]}); क्वेरी db.demo723.aggregate([ { $project: { count:

  1. - MongoDB में विशिष्ट नेस्टेड डॉक्यूमेंट्स के लिए ऑब्जेक्ट्स की सरणी पर क्वेरी कैसे करें?

    ऑब्जेक्ट्स की सरणी के लिए नेस्टेड डॉक्यूमेंट्स पर क्वेरी करने के लिए find() का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo763.insertOne( { _id:1, CountryName:US, studentInformation: [ { StudentName:Chris }, { StudentName:David, StudentAge:22 } ] } ); { acknowledged : true, insertedId : 1 } f

  1. - MongoDB में सरणी क्वेरी करके विशिष्ट मान प्राप्त करें

    सरणी से विशिष्ट मान प्राप्त करने के लिए aggregate() के साथ $project का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo761.insertOne( { details: [ { student: { FullName: Chris Brown } } ] } ); { acknowledged : true, insertedId : ObjectId(5eb034d15637cd592b2a4af1) } > db.demo761.insertOne( { de