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

MongoDB-এ ইন্টিজার ভ্যালুর উপর রেগেক্স সার্চ কীভাবে করবেন?

MongoDB-এ ইন্টিজার (সংখ্যা) ফিল্ডের উপর রেগুলার এক্সপ্রেশন সার্চ করতে সরাসরি রেগেক্স ব্যবহার করা যায় না, কারণ রেগেক্স শুধু স্ট্রিংয়ের উপর কাজ করে। এই সমস্যা সমাধানের জন্য $where অপারেটর ব্যবহার করে জাভাস্ক্রিপ্ট ফাংশন দিয়ে সংখ্যাকে স্ট্রিংয়ে কনভার্ট করে টেস্ট করা হয়।

সিনট্যাক্স

db.yourCollectionName.find({ 
  $where: "/^yourIntegerPatternValue.*/.test(this.yourFieldName)" 
});

নমুনা কালেকশন তৈরি

> db.regExpOnIntegerDemo.insertOne({ "StudentId": 2341234 });
{ "acknowledged": true, "insertedId": ObjectId("5c70370c75eb1743ddddce21") }

> db.regExpOnIntegerDemo.insertOne({ "StudentId": 123234 });
{ "acknowledged": true, "insertedId": ObjectId("5c70371175eb1743ddddce22") }

> db.regExpOnIntegerDemo.insertOne({ "StudentId": 9871234 });
{ "acknowledged": true, "insertedId": ObjectId("5c70371875eb1743ddddce23") }

> db.regExpOnIntegerDemo.insertOne({ "StudentId": 2345612 });
{ "acknowledged": true, "insertedId": ObjectId("5c70372275eb1743ddddce24") }

> db.regExpOnIntegerDemo.insertOne({ "StudentId": 1239812345 });
{ "acknowledged": true, "insertedId": ObjectId("5c70372975eb1743ddddce25") }

সমস্ত ডকুমেন্ট প্রদর্শন

> db.regExpOnIntegerDemo.find().pretty();

আউটপুট:

{ "_id": ObjectId("5c70370c75eb1743ddddce21"), "StudentId": 2341234 }
{ "_id": ObjectId("5c70371175eb1743ddddce22"), "StudentId": 123234 }
{ "_id": ObjectId("5c70371875eb1743ddddce23"), "StudentId": 9871234 }
{ "_id": ObjectId("5c70372275eb1743ddddce24"), "StudentId": 2345612 }
{ "_id": ObjectId("5c70372975eb1743ddddce25"), "StudentId": 1239812345 }

ইন্টিজার উপর রেগেক্স সার্চ

StudentId ফিল্ডে 123 দিয়ে শুরু হওয়া রেকর্ড খুঁজে বের করা:

> db.regExpOnIntegerDemo.find({ 
  $where: "/^123.*/.test(this.StudentId)" 
});

ফলাফল

{ "_id": ObjectId("5c70371175eb1743ddddce22"), "StudentId": 123234 }
{ "_id": ObjectId("5c70372975eb1743ddddce25"), "StudentId": 1239812345 }

ব্যাখ্যা: $where ক্লজে জাভাস্ক্রিপ্ট এক্সপ্রেশন লিখা যায়। this.StudentId সংখ্যাকে অটোমেটিক্যালি স্ট্রিংয়ে কনভার্ট করে test() মেথড রেগেক্স ম্যাচ চেক করে। ^123.* মানে ১২৩ দিয়ে শুরু হওয়া যেকোনো সংখ্যা।

সতর্কতা

$where ব্যবহার করা পারফরম্যান্সের দৃষ্টিকোণ থেকে ধীর, কারণ এটি প্রতিটি ডকুমেন্টের জন্য জাভাস্ক্রিপ্ট エンজিন চালাতে হয় এবং ইন্ডেক্স ব্যবহার করতে পারে না। বড় ডেটাসেটের জন্য স্ট্রিং ফিল্ডে সংরক্ষণ করুন বা MongoDB ৪.৪+ এর $regexMatch অগেটিগেশন ব্যবহার করুন।

  1. MongoDB-এ টেক্সট সার্চের সাথে রেগুলার এক্সপ্রেশন (Regex) ব্যবহার

  2. MongoDB-এ নির্দিষ্ট ফিল্ড দিয়ে সার্চ করা

  3. MongoDB-তে নেস্টেড ডকুমেন্ট মান অনুসন্ধান

  4. MongoDB-এ findOne()-এ রেগেক্স ব্যবহার করা