Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> डेटाबेस

अपने MongoDB कलेक्शन में सभी की नाम आसानी से प्राप्त करें

अपने स्कीमा को मान्य करने, फील्ड्स में टाइपो डीबग करने, या उन फील्ड्स को ढूंढने के लिए जो सेट नहीं होने चाहिए, आपको अपने MongoDB कलेक्शन में सभी कीज़ की समझ प्राप्त करने की आवश्यकता होगी।

MongoDB-as-a-service कंपनियों में से कई, ObjectRocket सहित, UI में सीधे ऐसा करने का एक आसान तरीका प्रदान करती हैं। अनुभवी MongoDB यूजर आमतौर पर एक ऑब्जेक्ट-डॉक्यूमेंट मैपर (ODM) से शुरू करते हैं, जैसे JS के लिए Mongoose या Python के लिए Mongoengine, ताकि वे अपने एप्लिकेशन के लिए एक सुसंगत स्कीमा बना सकें और टाइपो कम कर सकें। (ODMs टाइप वैलिडेशन भी करते हैं, इसलिए आप गलती से किसी ऐसे फील्ड में स्ट्रिंग नहीं डाल रहे हैं जिसमें इंटीजर हैं और जिस पर गणित लागू होता है।)

यदि आपके पास कोई सेवा या 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'] } );

आप यूनिक कीज़ प्राप्त करना चाहेंगे:
type, activity, equipment, location

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); }

Aggregation

आप aggregation का भी उपयोग कर सकते हैं। यह विधि उन सभी ड्राइवर्स के साथ काम करती है जो aggregate फ्रेमवर्क का समर्थन करते हैं। अपने aggregation के साथ, ओवरहेड कम करने के लिए $sample या $limit का उपयोग किया जा सकता है।

नोट: प्राइमरी रीड प्रेफरेंस के साथ चलाने से परफॉरमेंस प्रभावित हो सकती है। सेकेंडरी रीड प्रेफरेंस के साथ चलाने पर विचार करें।

$objectToArrray (वर्जन 3.4.4 और ऊपर में उपलब्ध) के साथ aggregation का उपयोग करके सभी टॉप की और वैल्यू पेयर को डॉक्यूमेंट एरे में बदलें, इसके बाद $unwind और $addToSet के साथ $group का उपयोग करके पूरे कलेक्शन में विशिष्ट कीज़ प्राप्त करें।

$$ROOT टॉप लेवल डॉक्यूमेंट को संदर्भित करने के लिए।

db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$unwind":"$arrayofkeyvalue"}, {"$group":{"_id":null,"allkeys":{"$addToSet":"$arrayofkeyvalue.k"}}} ])

एकल डॉक्यूमेंट में कीज़ प्राप्त करें

आप एकल डॉक्यूमेंट में कीज़ प्राप्त करने के लिए aggregation का भी उपयोग कर सकते हैं:

db.activities.aggregate([ {"$project":{"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, {"$project":{"keys":"$arrayofkeyvalue.k"}} ])

Mongo Shell

आप mongo shell क्लाइंट के तहत इसे भी आज़मा सकते हैं:

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);

Python

या, आप 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() )

JavaScript

या, आप JavaScript का उपयोग कर सकते हैं:

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 मैनेजमेंट से अभिभूत हैं और डेटाबेस मैनेजमेंट के बजाय अपने कोड पर ध्यान केंद्रित करना चाहते हैं, तो हम यहां आपके लिए हैं। हमारे डेटाबेस प्लेटफॉर्म और व्हाइट ग्लव सपोर्ट को मुफ्त में आज़माएं।

  1. - Java का उपयोग करके सभी MongoDB डेटाबेस की सूची कैसे प्राप्त करें?

    MongoDB में, आप show dbs कमांड का उपयोग करके डेटाबेस की सूची देख सकते हैं > show dbs admin config local myDatabase sampleDatabase students test testDB Java में, आप getDatabaseNames() मेथड का उपयोग करके MongoDB में सभी डेटाबेस की सूची प्राप्त कर सकते हैं। उदाहरण import com.mongodb.client.MongoIte

  1. - पायथन डिक्शनरी से सभी कीज़ की सूची कैसे प्राप्त करें?

    डिक्शनरी से सभी कीज़ की सूची प्राप्त करने के लिए, आप बस dict.keys() फंक्शन का उपयोग कर सकते हैं। उदाहरण my_dict = {name: TutorialsPoint, time: 15 years, location: India} key_list = list(my_dict.keys()) print(key_list) आउटपुट यह आउटपुट देगा - [name, time, location] आप लिस्ट कॉम्प्रिहेंशन का उपयोग

  1. MongoDB संग्रह से सभी फील्ड नाम कुशलतापूर्वक पुनर्प्राप्त करें MongoDB संग्रह से सभी फील्ड नाम कुशलतापूर्वक पुनर्प्राप्त करें

    परिचय मूल रूप से 18 जनवरी, 2019 को ObjectRocket.com/blog पर प्रकाशित। अपने स्कीमा को मान्य करने के लिए, फील्ड में टाइपो डीबग करने के लिए, या उन फील्ड को ढूंढने के लिए जिन्हें आप सेट नहीं करना चाहिए, आपको अपने MongoDB® संग्रह में सभी कुंजियों की समझ की आवश्यकता है। ObjectRocket सहित कई MongoDB-as-a-