अपने स्कीमा को सत्यापित करने के लिए, फ़ील्ड में टाइपो के लिए डीबग करें, या ऐसे फ़ील्ड ढूंढें जिन्हें सेट नहीं किया जाना चाहिए, आपको अपने MongoDB संग्रह में सभी कुंजियों की समझ प्राप्त करने की आवश्यकता होगी।
कई MongoDB-as-a-service कंपनियाँ UI में इस अधिकार को करने का एक आसान तरीका प्रदान करती हैं, जिसमें ObjectRocket भी शामिल है। अनुभवी MongoDB उपयोगकर्ता आमतौर पर ऑब्जेक्ट-डॉक्यूमेंट मैपर (ODM) से शुरू करते हैं, जैसे कि JS के लिए Mongoose या Python के लिए Mongoengine, ताकि वे अपने एप्लिकेशन के लिए एक सुसंगत स्कीमा बना सकें और टाइपो को कम कर सकें। (ओडीएम टाइप सत्यापन भी करते हैं, इसलिए आप गलती से एक स्ट्रिंग को उस फ़ील्ड में नहीं डाल रहे हैं जिसमें पूर्णांक हैं और उस पर गणित लागू है।)
यदि आपके पास कोई सेवा या ODM नहीं है, तो कई अन्य विधियाँ हैं जिनका उपयोग आप कुंजियों तक पहुँचने के लिए कर सकते हैं। विभिन्न परिस्थितियों के लिए MongoDB संग्रह में सभी कुंजियों को प्राप्त करने के सर्वोत्तम तरीके यहां दिए गए हैं।
एक उदाहरण
db.activities.insert( { type : [‘indoor’, 'outdoor' , ‘mixed’] } );
db.activities.insert( { activity : 'cycling' } );
db.activities.insert( { activity : ‘skiing’, location: ‘Alpes’, } );
db.activities.insert( { equipment : [‘paddles’,‘sunglasses’] } );
आप अद्वितीय कुंजियाँ प्राप्त करना चाहेंगे:
प्रकार, गतिविधि, उपकरण, स्थान
MapReduce
आप इसे MapReduce के साथ कर सकते हैं:
mr = db.runCommand({ "mapreduce" : "activities", "map" : function() { for (var key in this) { emit(key, null); } }, "reduce" : function(key, stuff) { return null; }, "out": "activities" + "_keys" })
एक बार यह पूरा हो जाने के बाद, सभी कुंजियों को खोजने के लिए परिणामी संग्रह पर विशिष्ट कमांड चलाएँ:
db.activities_keys.distinct("_id")
यदि आप किसी उप-दस्तावेज़ में सभी अद्वितीय कुंजियों की सूची प्राप्त करना चाहते हैं, तो बस इस पंक्ति को संशोधित करें:
for (var key in this.first_level.second_level.nth_level) { emit(key, null); }
एकत्रीकरण
आप एकत्रीकरण का भी उपयोग कर सकते हैं। यह विधि उन सभी ड्राइवरों के साथ काम करती है जो समग्र ढांचे का समर्थन करते हैं। आपके एकत्रीकरण के साथ, $नमूना या $सीमा ओवरहेड को कम करने के लिए इस्तेमाल किया जा सकता है।
नोट:प्राथमिक पठन वरीयता के साथ चलने से प्रदर्शन प्रभावित हो सकता है। माध्यमिक पठन वरीयता के साथ चलने पर विचार करें।
$objectToArray . के साथ एकत्रीकरण का उपयोग करें (संस्करण 3.4.4 और बाद के संस्करण में उपलब्ध) सभी शीर्ष कुंजी और मूल्य युग्मों को दस्तावेज़ सरणियों में बदलने के लिए उसके बाद $अनविंड और $समूह $addToSet . के साथ संपूर्ण संग्रह में अलग-अलग कुंजियाँ प्राप्त करने के लिए।
$$रूट शीर्ष स्तर के दस्तावेज़ को संदर्भित करने के लिए।
db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$unwind":"$arrayofkeyvalue"}, {"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}} ])
एक ही दस्तावेज़ में कुंजी प्राप्त करें
आप एकल दस्तावेज़ में कुंजी प्राप्त करने के लिए एकत्रीकरण का भी उपयोग कर सकते हैं:
db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$project":{"keys":"$arrayofkeyvalue.k"}} ])
मोंगो शेल
आप इसे मोंगो शेल क्लाइंट के तहत भी आज़मा सकते हैं:
var allKeys = {}; db.YOURCOLLECTION.find().forEach(function(doc){Object.keys(doc).forEach(function(key){allKeys[key]=1})}); allKeys;
एकल दस्तावेज़ के लिए आउटपुट फ़ील्ड
यदि आपको संग्रह में एक दस्तावेज़ के लिए फ़ील्ड के आउटपुट की आवश्यकता है (क्योंकि अन्य सभी के पास पूरी तरह से अलग-अलग कुंजियाँ हो सकती हैं) निम्नलिखित का उपयोग करें:
doc=db.thinks.findOne(); for (key in doc) print(key);
पायथन
या, आप पायथन का उपयोग कर सकते हैं। यह संग्रह में सभी शीर्ष-स्तरीय कुंजियों का सेट लौटाता है:
#Using pymongo and connection named 'db' reduce( lambda all_keys, rec_keys: all_keys | set(rec_keys), map(lambda d: d.keys(), db.things.find()), set() )
जावास्क्रिप्ट
या, आप जावास्क्रिप्ट का उपयोग कर सकते हैं:
db.collection('collectionName').mapReduce( function() { for (var key in this) { emit(key, null); } }, function(key, stuff) { return null; }, { "out": "allFieldNames" }, function(err, results) { var fields = db.collection('allFieldNames').distinct('_id'); fields .then(function(data) { var finalData = { "status": "success", "fields": data }; res.send(finalData); delteCollection(db, 'allFieldNames'); }) .catch(function(err) { res.send(err); delteCollection(db, 'allFieldNames'); }); });
नए बनाए गए संग्रह “allFieldNames” को पढ़ने के बाद, इसे हटा दें।
db.collection("allFieldNames").remove({}, function (err,result) { db.close(); return; });
इतने सारे विकल्प...
इन Mongo कुंजियों को प्राप्त करने के लिए आपके पास बहुत सारे विकल्प हैं! यदि आप MongoDB प्रबंधन से अभिभूत हैं और डेटाबेस प्रबंधन के बजाय अपने कोड पर ध्यान केंद्रित करना चाहते हैं, तो हम यहां आपके लिए हैं। हमारे डेटाबेस प्लेटफॉर्म और हमारे व्हाइट ग्लव सपोर्ट को मुफ़्त में आज़माएं।