MongoDB-এ রেজেক্স ব্যবহার করে অ্যারে ফিল্টারিং
যখন একটি অ্যারে ফিল্ডে নির্দিষ্ট কিছু মান বাদ দিয়ে অন্য মান থাকা ডকুমেন্ট খুঁজতে হয়, তবে রেজেক্স (Regular Expression) ব্যবহার করা একটি কার্যকর পদ্ধতি। নিচে উদাহরণ দেওয়া হলো।
নমুনা ডেটা তৈরি
> db.demo228.insertOne({"Subjects":["MongoDB","Java"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3fa51f03d395bdc213473b") }
> db.demo228.insertOne({"Subjects":["MongoDB","Java","MySQL"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3fa52c03d395bdc213473c") }
সকল ডকুমেন্ট দেখানো
> db.demo228.find();
আউটপুট:
{ "_id" : ObjectId("5e3fa51f03d395bdc213473b"), "Subjects" : [ "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e3fa52c03d395bdc213473c"), "Subjects" : [ "MongoDB", "Java", "MySQL" ] }
MongoDB এবং Java বাদ দিয়ে অন্য বিষয় থাকা ডকুমেন্ট খুঁজে বের করা
> db.demo228.find({ "Subjects": /^(?!MongoDB|Java)/ });
আউটপুট:
{ "_id" : ObjectId("5e3fa52c03d395bdc213473c"), "Subjects" : [ "MongoDB", "Java", "MySQL" ] }
রেজেক্স ব্যাখ্যা
^(?!MongoDB|Java)— নেগেটিভ লুকঅহেড (Negative Lookahead) ব্যবহার করে "MongoDB" বা "Java" ছাড়া যেকোনো স্ট্রিং ম্যাচ করে- দ্বিতীয় ডকুমেন্টে "MySQL" থাকায় সেটি ফলাফলে আসেছে
বিকল্প পদ্ধতি: $nin অপারেটর
আধুনিক MongoDB সংস্করণে আরও পঠনীয় পদ্ধতি:
> db.demo228.find({ "Subjects": { $nin: ["MongoDB", "Java"] } });
এটি একই ফলাফল দেবে কিন্তু বুঝতে এবং রক্ষণাবেক্ষণ করতে সহজ।