मूल रूप से 18 जनवरी, 2019 को ObjectRocket.com/blog पर प्रकाशित हुआ।
अपने स्कीमा को सत्यापित करने के लिए, फ़ील्ड में टाइपो के लिए डीबग करें, या ऐसे फ़ील्ड ढूंढें जिन्हें आपको सेट नहीं करना चाहिए, आपको अपने MongoDB® संग्रह में सभी कुंजियों की समझ की आवश्यकता है।
ObjectRocket सहित कई MongoDB-as-a-Service कंपनियाँ उपयोगकर्ता इंटरफ़ेस (UI) में इस अधिकार को करने का एक आसान तरीका प्रदान करती हैं। अनुभवी MongoDB उपयोगकर्ता आमतौर पर ऑब्जेक्ट-डॉक्यूमेंट मैपर (ODM) से शुरू करते हैं, जैसे कि Mongoose for JavaScript® या Mongoengine for Python®, ताकि वे अपने एप्लिकेशन के लिए एक सुसंगत स्कीमा बना सकें और टाइपो को कम कर सकें। ओडीएम टाइप सत्यापन भी करते हैं, इसलिए आप गलती से एस्ट्रिंग को उस फ़ील्ड में नहीं डालते हैं जिसमें पूर्णांक होते हैं और उस पर गणित लागू होता है।
यदि आपके पास कोई सेवा या ODM नहीं है, तो आप कुंजियों तक पहुँचने के लिए कई अन्य विधियों का उपयोग कर सकते हैं। हमने विभिन्न परिस्थितियों के लिए MongoDB संग्रह में सभी कुंजियाँ प्राप्त करने के लिए निम्नलिखित तरीके खोजे हैं।
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" })
ऑपरेशन समाप्त होने के बाद, निम्न distinct
चलाएँ सभी कुंजियों को खोजने के लिए परिणामी संग्रह पर आदेश:
db.activities_keys.distinct("_id")
यदि आप किसी उप-दस्तावेज़ में सभी अद्वितीय कुंजियों की सूची प्राप्त करना चाहते हैं, तो निम्न पंक्ति को संशोधित करें:
for (var key in this.first_level.second_level.nth_level) { emit(key, null); }
एकत्रीकरण
आप एकत्रीकरण का भी उपयोग कर सकते हैं। यह विधि उन सभी ड्राइवरों के साथ काम करती है जो समग्र ढांचे का समर्थन करते हैं। अपने एकत्रीकरण के साथ, $sample
. का उपयोग करें या $limit
ओवरहेड कम करें।
नोट: प्राथमिक पठन वरीयता के साथ चलने से प्रदर्शन प्रभावित हो सकता है। माध्यमिक पठन वरीयता के साथ चलने पर विचार करें।
$objectToArrray
. के साथ एग्रीगेशन का उपयोग करें (संस्करण 3.4.4 और बाद के संस्करण में उपलब्ध) सभी शीर्ष कुंजी और मूल्य जोड़े को दस्तावेज़ सरणियों में बदलने के लिए उसके बाद $unwind
और $group
$addToSet
. के साथ संपूर्ण संग्रह में अलग-अलग कुंजियाँ प्राप्त करने के लिए।
निम्नलिखित उदाहरण में, $$ROOT
शीर्ष स्तर के दस्तावेज़ का संदर्भ देता है।
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);
पायथन
MongoDB कुंजियाँ प्राप्त करने के लिए आप Python का उपयोग कर सकते हैं। निम्न उदाहरण संग्रह में सभी शीर्ष-स्तरीय कुंजियों की थीसेट लौटाता है:
#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 प्रबंधन से अभिभूत हैं और डेटाबेस प्रबंधन के बजाय अपने कोड पर ध्यान केंद्रित करना चाहते हैं, तो हम यहां आपके लिए हैं।
रैकस्पेस डीबीए सेवाओं के बारे में अधिक जानें।
कोई टिप्पणी करने या प्रश्न पूछने के लिए प्रतिक्रिया टैब का उपयोग करें। आप हमारे साथ बातचीत भी शुरू कर सकते हैं।