ভূমিকা
মূলত ১৮ জানুয়ারি, ২০১৯ को ObjectRocket.com/blog-এ প্রকাশিত।
আপনার স্কিমা যাচাই করতে, ফিল্ডে টাইপো ডিবাগ করতে, বা সেসব ফিল্ড খুঁজে বের করতে যা আপনাকে সেট করা উচিত নয়, আপনার MongoDB® কালেকশনের সব কী বোঝা প্রয়োজন।
অনেক MongoDB-as-a-Service কোম্পানি, ObjectRocket সহ, ইউজার ইন্টারফেস (UI)-এ এই কাজটি সহজে করার উপায় অফার করে। অভিজ্ঞ MongoDB ইউজাররা সাধারণত একটি অবজেক্ট-ডকুমেন্ট ম্যাপার (ODM) দিয়ে শুরু করেন, যেমন JavaScript®-এর জন্য Mongoose বা Python®-এর জন্য Mongoengine, যাতে তারা তাদের অ্যাপ্লিকেশনের জন্য একটি কনসিস্টেন্ট স্কিমা বিল্ড করতে পারে এবং টাইপো কমাতে পারে। ODM-গুলো টাইপ ভ্যালিডেশনও করে, যাতে আপনি অবিচ্ছিন্নভাবে একটি স্ট্রিং একটি ফিল্ডে না দেন যাতে ইন্টিজার আছে এবং সেটিতে ম্যাথ অ্যাপ্লাই করা হয়।
আপনার যদি সার্ভিস বা 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’] } );
আপনাকে উনিক কীগুলো পেতে হবে: 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
আপনি এগгреগেশনও ব্যবহার করতে পারেন। এই মেথডটি সমস্ত ড্রাইভারের সাথে কাজ করে যা aggregate ফ্রেমওয়ার্ক সাপোর্ট করে। আপনার এগгреগেশনসহ $sample বা $limit ব্যবহার করুন ওভারহেড কমাতে।
দ্রষ্টব্য: প্রাইমারি রিড প্রিফারেন্সের সাথে রান করলে পারফরম্যান্সে প্রভাব পড়তে পারে। সেকেন্ডারি রিড প্রিফারেন্সের সাথে রান করার কথা বিবেচনা করুন।
$objectToArrray (ভার্সন 3.4.4 এবং উপরে উপলব্ধ) সহ aggregation ব্যবহার করুন সব টপ কী এবং ভ্যালু পেয়ার ডকুমেন্ট অ্যারে-এ কনভার্ট করার জন্য, তারপর $unwind এবং $group with $addToSet ব্যবহার করুন সমগ্র কালেকশনে ডISTINCT কী পেতে।
নিচের উদাহরণে, $$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 শেল
আপনি Mongo শেল ক্লায়েন্ট ব্যবহার করে কীগুলো পেতে পারেন নিচের কমান্ড দিয়ে:
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
আপনি 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() )
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 ম্যানেজমেন্টে অভিভূত হন এবং ডেটাবেস ম্যানেজমেন্টের বদলে আপনার কোডে ফোকাস করতে চান, তবে আমরা আপনার জন্য এখানে আছি।
Rackspace DBA সার্ভিস সম্পর্কে আরও জানুন।
ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য বা প্রশ্ন করুন। আপনি আমাদের সাথে কথা বলতে পারেন।