মূলত 18 জানুয়ারী, 2019-এ ObjectRocket.com/blog-এ প্রকাশিত৷
আপনার স্কিমা যাচাই করতে, ক্ষেত্রগুলিতে টাইপোর জন্য ডিবাগ করতে বা আপনার সেট করা উচিত নয় এমন ক্ষেত্রগুলি খুঁজে পেতে, আপনার MongoDB® সংগ্রহে থাকা সমস্ত কীগুলির বোঝার প্রয়োজন৷
অবজেক্ট রকেট সহ অনেক মঙ্গোডিবি-এ-সার্ভিস কোম্পানি, ইউজার ইন্টারফেসে (UI) এটি করার একটি সহজ উপায় অফার করে। অভিজ্ঞ MongoDBusers সাধারণত একটি অবজেক্ট-ডকুমেন্ট ম্যাপার (ODM) দিয়ে শুরু করে, যেমন JavaScript® এর জন্য 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" })
অপারেশন শেষ হওয়ার পরে, নিম্নলিখিত 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 কী পেতে পাইথন ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি সংগ্রহের সমস্ত শীর্ষ-স্তরের কীগুলির সেট প্রদান করে:
#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 কীগুলি পাওয়ার আরেকটি উপায় অফার করে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
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; });
অনেক বিকল্প
এই মঙ্গো কীগুলি পেতে আপনার কাছে অনেকগুলি বিকল্প রয়েছে। আপনি যদি মঙ্গোডিবি ব্যবস্থাপনায় অভিভূত হন এবং ডাটাবেস পরিচালনার পরিবর্তে আপনার কোডের উপর ফোকাস করতে চান, আমরা এখানে আপনার জন্য আছি।
Rackspace DBA পরিষেবা সম্পর্কে আরও জানুন৷
৷কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। আপনি আমাদের সাথে একটি কথোপকথনও শুরু করতে পারেন৷