আপনার স্কিমা ভ্যালিডেট করতে, ফিল্ডে টাইপো ডিবাগ করতে, বা সেই ফিল্ডগুলো খুঁজে বের করতে যেগুলো সেট হওয়া উচিত নয়, আপনাকে আপনার MongoDB কালেকশনের সকল কি বুঝতে হবে।
অনেক MongoDB-অ্যিজ-অ-সার্ভিস কোম্পানি UI-তে এটি করার সহজ উপায় অফার করে, ObjectRocket সহ। অভিজ্ঞ MongoDB ব্যবহারকারীগণ সাধারণত একটি অবজেক্ট-ডকুমেন্ট ম্যাপার (ODM) দিয়ে শুরু করেন, যেমন JS-এর জন্য Mongoose বা Python-এর জন্য Mongoengine, যাতে তারা তাদের অ্যাপ্লিকেশনের জন্য একটি কনসিস্টেন্ট স্কিমা বিল্ড করতে পারে এবং টাইপো কমাতে পারে। (ODM-রা টাইপ ভ্যালিডেশন ও করে, যাতে আপনি ভুলে একটি স্ট্রিং ইন্টিজার ফিল্ডে রাখেন না যেটিতে ম্যাথ অ্যাপ্লাই করা হয়।)
আপনার কাছে যদি সার্ভিস বা 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
আপনি এগ্রিগেশনও ব্যবহার করতে পারেন। এই পদ্ধতি সকল ড্রাইভারের সাথে কাজ করে যা অগ্রিগেশন ফ্রেমওয়ার্ক সাপোর্ট করে। আপনার অগ্রিগেশনে, $sample বা $limit ব্যবহার করে ওভারহেড কমাতে পারেন।
দ্রষ্টব্য: Primary read preference-এ চালালে পারফরম্যান্সে প্রভাব ফেলতে পারে। Secondary read preference-এ চালানোর কথা বিবেচনা করুন।
$objectToArray (ভার্সন ৩.৪.৪ এবং উপরে উপলব্ধ) ব্যবহার করে অগ্রিগেশন দিয়ে সকল টপ-লেভেল কি এবং ভ্যালু পেয়ার ডকুমেন্ট অ্যারে-এ কনভার্ট করুন, তারপর $unwind এবং $addToSet সহ $group ব্যবহার করে পুরো কালেকশনে ডিস্টিনক্ট কি পান।
$$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"}} ])
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; });
অনেক অপশন...
MongoDB কি পাওয়ার জন্য আপনার কাছে অনেক অপশন আছে! MongoDB ম্যানেজমেন্টে অভিভূত হলে এবং ডাটাবেস ম্যানেজমেন্টের বদলে আপনার কোডে ফোকাস করতে চান, তবে আমরা আপনার জন্য এখানে আছি। আমাদের ডাটাবেস প্ল্যাটফর্ম এবং হোয়াইট গ্লভ সাপোর্ট বিনামূল্যে ট্রাই করুন।