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

MongoDB में केवल एम्बेडेड दस्तावेज़ कैसे लौटाएं?


सीमा: केवल एम्बेडेड दस्तावेज़ नहीं लौटाया जा सकता

MongoDB का find() हमेशा शीर्ष-स्तरीय दस्तावेज़ लौटाता है। आप केवल एम्बेडेड सरणी के मिलान वाले तत्वों को सीधे फ़िल्टर करके नहीं निकाल सकते। इसके लिए एग्रीगेशन पाइपलाइन ($unwind, $match, $project) की आवश्यकता होती है।

उदाहरण: एम्बेडेड सरणी के साथ दस्तावेज़

> db.queryToEmbeddedDocument.insertOne({ 
    "UserName": "Larry", 
    "PostDetails": [ 
        {"UserMessage": "Hello", "UserLikes": 8}, 
        {"UserMessage": "Hi", "UserLikes": 6}, 
        {"UserMessage": "Good Morning", "UserLikes": 12}, 
        {"UserMessage": "Awesome", "UserLikes": 4} 
    ] 
}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5c988a9f330fd0aa0d2fe4bd") }

पूरा दस्तावेज़ देखना

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

आउटपुट: पूरा दस्तावेज़ जिसमें पूरी PostDetails सरणी शामिल है।

प्रोजेक्शन के साथ क्वेरी (सीमा प्रदर्शित करता है)

> db.queryToEmbeddedDocument.find({"PostDetails.UserLikes": {$gte: 8}}, {PostDetails: 1}).pretty();

आउटपुट: पूरा दस्तावेज़ लौटाता है, केवल UserLikes >= 8 वाले तत्व नहीं। प्रोजेक्शन केवल शीर्ष-स्तरीय फ़ील्ड को शामिल/बहिष्कृत करता है, सरणी तत्वों को फ़िल्टर नहीं करता।

समाधान: एग्रीगेशन पाइपलाइन का उपयोग करें

केवल मिलान करने वाले एम्बेडेड दस्तावेज़ प्राप्त करने के लिए:

db.queryToEmbeddedDocument.aggregate([
  { $unwind: "$PostDetails" },
  { $match: { "PostDetails.UserLikes": { $gte: 8 } } },
  { $project: { _id: 0, "PostDetails": 1 } }
]);

निष्कर्ष: सरल find() के साथ केवल एम्बेडेड दस्तावेज़ लौटाना संभव नहीं है। सरणी तत्वों को फ़िल्टर करने और पुनः आकार देने के लिए एग्रीगेशन फ्रेमवर्क का उपयोग करें।

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

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

  1. - MongoDB क्वेरी: नेस्टेड दस्तावेज अपडेट करें

    आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo595.insertOne({ Information: [ { _id: new ObjectId(), Name:Chris }, { _id:new ObjectId(), Name:Robert } ] }); { acknowledged : true, insertedId : ObjectId(5e93369cfd2d90c177b5bce4) } find() मेथड की मदद से कलेक्शन के सभी

  1. - MongoDB में एम्बेडेड डॉक्यूमेंट की सरणी पर फ़िल्टर क्वेरी कैसे करें?

    इसके लिए MongoDB में aggregate() का उपयोग करें। आइए 3 स्तरों के नेस्टेड डॉक्यूमेंट्स के साथ एक कलेक्शन बनाते हैं: > db.demo736.insertOne( { _id: 101, details1: [ { details2: [ { details3: { Name: John } } ] } ] } ); { acknowledged : true, insertedId : 101 } > db.demo736.insertOne( { _id: 102,