MongoDB-এ বাইনারি ডেটা সংরক্ষণের জন্য BinData (বাইনারি ডেটা) টাইপ ব্যবহার করা হয়। প্রতিটি BinData-র একটি সাবটাইপ (০-২৫৫) থাকে। সাবটাইপ অনুযায়ী কোয়েরি করতে subtype() মেথড ব্যবহার করা হয়।
BinData সাবটাইপ সমূহ
| সাবটাইপ | নাম | ব্যবহার |
|---|---|---|
| ০ | Generic binary | সাধারণ বাইনারি ডেটা |
| ১ | Function | ফাংশন কোড (ডিপ্রিকেটেড) |
| ২ | Binary (Old) | পুরানো বাইনারি ফরম্যাট |
| ৩ | UUID (Old) | পুরানো UUID ফরম্যাট |
| ৪ | UUID (Standard) | RFC 4122 UUID (সтан্ডার্ড) |
| ৫ | MD5 | MD5 হ্যাশ |
| ৬ | Encrypted | এনক্রিপ্টেড ডেটা |
| ৭ | Column | কলামনার ডেটা |
| ১২৮-২৫৫ | User defined | ব্যবহারকারী সংজ্ঞায়িত |
নমুনা কালেকশন তৈরি
> db.demo249.insertOne({ "_id": BinData(0, "AQAAAAEBAAVlbl9VSwAAAAAAAAhv") });
{ "acknowledged": true, "insertedId": BinData(0, "AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }
> db.demo249.insertOne({ "_id": BinData(4, "CNDF66qIlCY92q1vFAAAAQ==") });
{ "acknowledged": true, "insertedId": UUID("08d0c5eb-aa88-9426-3dda-ad6f14000001") }
> db.demo249.insertOne({ "_id": BinData(3, "CNDF66qJ29g92q1vFAAAEw==") });
{ "acknowledged": true, "insertedId": BinData(3, "CNDF66qJ29g92q1vFAAAEw==") }
ডকুমেন্টগুলো দেখানো
> db.demo249.find();
আউটপুট:
{ "_id": BinData(0, "AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }
{ "_id": UUID("08d0c5eb-aa88-9426-3dda-ad6f14000001") }
{ "_id": BinData(3, "CNDF66qJ29g92q1vFAAAEw==") }
সাবটাইপ ০ (Generic) वाले ডকুমেন্ট কোয়েরি
> db.demo249.find(function(){ return this._id.subtype() == 0 });
ফলাফল
{ "_id": BinData(0, "AQAAAAEBAAVlbl9VSwAAAAAAAAhv") }
ব্যাখ্যা:
BinData(0, ...)- সাবটাইপ ০ (Generic)।BinData(4, ...)- সাবটাইপ ৪ (Standard UUID) - আউটপুটেUUID(...)হিসেবে দেখানো হয়।BinData(3, ...)- সাবটাইপ ৩ (Old UUID)।this._id.subtype()- _id ফিল্ডের BinData সাবটাইপ রিটার্ন করে।function(){ ... }- জাভাস্ক্রিপ্ট ফাংশন<$where>-এর মতো কাজ করে (ধীর)।
উন্নত পদ্ধতি: $expr এবং $type (MongoDB ৩.৬+)
// $type অপারেটর BSON টাইপ চেক করে (BinData = 5)
db.demo249.find({ $expr: { $eq: [ { $type: "$_id" }, "binData" ] } });
// সাবটাইপ চেক করতে $where বা অ্যাগ্রিগেশন লাগে
db.demo249.aggregate([
{ $match: { $expr: { $eq: [ { $substr: [ { $toString: "$_id" }, 0, 1 ] }, "0" ] } } }
]);
সতর্কতা
$where/ জাভাস্ক্রিপ্ট ফাংশন ধীর (COLLSCAN)।- ইন্ডেক্স ব্যবহার করে না।
- বড় ডেটাসেটে সাবটাইপ আলাদা ফিল্ডে সংরক্ষণ করাই ভালো।