কম্পিউটার টিউটোরিয়াল

MongoDB-এ BinData টাইপ অনুযায়ী কোয়েরি করা

MongoDB-এ বাইনারি ডেটা সংরক্ষণের জন্য BinData (বাইনারি ডেটা) টাইপ ব্যবহার করা হয়। প্রতিটি BinData-র একটি সাবটাইপ (০-২৫৫) থাকে। সাবটাইপ অনুযায়ী কোয়েরি করতে subtype() মেথড ব্যবহার করা হয়।

BinData সাবটাইপ সমূহ

সাবটাইপনামব্যবহার
০Generic binaryসাধারণ বাইনারি ডেটা
১Functionফাংশন কোড (ডিপ্রিকেটেড)
২Binary (Old)পুরানো বাইনারি ফরম্যাট
৩UUID (Old)পুরানো UUID ফরম্যাট
৪UUID (Standard)RFC 4122 UUID (সтан্ডার্ড)
৫MD5MD5 হ্যাশ
৬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)।
  • ইন্ডেক্স ব্যবহার করে না।
  • বড় ডেটাসেটে সাবটাইপ আলাদা ফিল্ডে সংরক্ষণ করাই ভালো।
  1. MongoDB-তে সাবডকুমেন্টের অ্যারে কুয়েরি

  2. MongoDB-এ _id দিয়ে গ্রুপ করে ডকুমেন্ট কাউন্ট করা

  3. MongoDB-এ কালেকশন রিনেম করা (renameCollection)

  4. MongoDB-তে এমবেডেড ডকুমেন্ট কোয়েরি করা (aggregate + $unwind)