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

MongoDB में सबडॉक्यूमेंट पर शर्त के आधार पर दस्तावेज़ कैसे क्वेरी करें?

MongoDB में सरणी के अंदर सबडॉक्यूमेंट पर शर्त के आधार पर दस्तावेज़ फ़िल्टर करने के लिए, $expr के साथ $let, $arrayElemAt (या $filter/$elemMatch) का उपयोग करें।

उदाहरण: दिनांक सीमा वाले सबडॉक्यूमेंट्स की सरणी

> db.demo394.insertOne({
    details: [
        { _id: '1', startDate: '2018-01-11T07:00:00.000Z', endDate: '2019-01-12T07:59:59.999Z' },
        { _id: '2', startDate: '2019-01-21T07:00:00.000Z', endDate: '2020-01-04T07:59:59.999Z' }
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e716817aa3ef9ab8ab202") }

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

> db.demo394.find();

आउटपुट: दो सबडॉक्यूमेंट्स वाला एक दस्तावेज़।

क्वेरी: अंतिम सबडॉक्यूमेंट का endDate विशिष्ट मान से मेल खाता है

> db.demo394.find({
    $expr: {
        $let: {
            vars: { "d": { $arrayElemAt: [ "$details", -1 ] } },
            in: { $eq: [ "$$d.endDate", "2020-01-04T07:59:59.999Z" ] }
        }
    }
});

परिणाम

दस्तावेज़ लौटाया जाता है क्योंकि अंतिम तत्व का endDate मेल खाता है।

व्याख्या

  1. $arrayElemAt: ["$details", -1] सरणी का अंतिम तत्व लौटाता है (-1 = अंतिम)।
  2. $let: उस तत्व को चर d में बांधता है।
  3. $eq: $$d.endDate की तुलना लक्ष्य स्ट्रिंग से करता है।
  4. $expr: फाइंड क्वेरी के अंदर एग्रीगेशन एक्सप्रेशन के उपयोग की अनुमति देता है।

वैकल्पिक: $elemMatch (सरल फील्ड मिलान के लिए)

> db.demo394.find({ details: { $elemMatch: { endDate: "2020-01-04T07:59:59.999Z" } } });

यह जांचता है कि क्या कोई भी सबडॉक्यूमेंट शर्त से मेल खाता है (सिर्फ अंतिम नहीं)।

वैकल्पिक: एग्रीगेशन $filter (सबडॉक्यूमेंट लौटाने के लिए)

> db.demo394.aggregate([
    { $project: {
        matchingDetails: {
            $filter: {
                input: "$details",
                cond: { $eq: [ "$$this.endDate", "2020-01-04T07:59:59.999Z" ] }
            }
        }
    }}
]);

नोट

  • दिनांक स्ट्रिंग के रूप में संग्रहीत हैं; उचित दिनांक तुलना के लिए, ISODate ऑब्जेक्ट संग्रहीत करें और $dateFromString या सीधे तुलना का उपयोग करें।
  • $arrayElemAt के लिए MongoDB 3.2+ आवश्यक।
  1. - MongoDB क्वेरी: दस्तावेज़ों में विशिष्ट फ़ील्ड के मान जोड़ें

    आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo677.insertOne({Value:10}); { acknowledged : true, insertedId : ObjectId(5ea421f404263e90dac943f8) } > db.demo677.insertOne({Value:50}); { acknowledged : true, insertedId : ObjectId(5ea421f704263e90dac943f9) } > db.demo677.insertOne({Value:20}

  1. - MongoDB में एम्बेडेड दस्तावेजों को क्वेरी करें

    MongoDB में एम्बेडेड दस्तावेजों को क्वेरी करने के लिए, aggregate() का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo705.insertOne( { _id:101, Information: [ { StudentName:Chris, StudentAge:21 }, { StudentName:David, StudentAge:23 },

  1. - MongoDB में एक क्वेरी से कई डॉक्यूमेंट्स कैसे अपडेट करें?

    एक क्वेरी से कई डॉक्यूमेंट्स अपडेट करने के लिए MongoDB में bulkWrite() का उपयोग करें। आइए एक कलेक्शन बनाते हैं: > db.demo760.insertOne({id:1,details:{Value1:100,Value2:50}}); { acknowledged : true, insertedId : ObjectId(5eb0309f5637cd592b2a4aee) } > db.demo760.insertOne({id:2,details:{Value1: