TinyDB হল একটি হালকা-ওজনের NoSQL ডাটাবেস যা JSON ফাইলের মাধ্যমে ডেটা সংরক্ষণ করে। এটি একটি সহজ এবং কার্যকর ডাটাবেস, তবে কিছু উন্নত Filtering এবং Sorting কৌশল ব্যবহার করে ডেটা অনুসন্ধান এবং সংগঠিত করা যায়। TinyDB তে Advanced Filtering এবং Sorting এর মাধ্যমে আপনি ডেটা সঠিকভাবে এবং দ্রুত অনুসন্ধান ও সাজাতে পারবেন।
TinyDB তে Filtering এবং Sorting করার জন্য Query এবং search() মেথড ব্যবহার করা হয়। এই পোস্টে আমরা Advanced Filtering এবং Sorting কৌশল নিয়ে আলোচনা করব।
Advanced Filtering Techniques
TinyDB তে Advanced Filtering ব্যবহার করতে হলে, Query ক্লাসের সাহায্যে আপনি বিভিন্ন শর্ত এবং যুক্তি ব্যবহার করতে পারেন। এতে & (AND), | (OR), ~ (NOT), এবং matches() (Regex Matching) ব্যবহার করে আরও জটিল শর্ত তৈরি করা যায়।
১. Multiple Conditions (Multiple Shorthand Filtering)
TinyDB তে একাধিক শর্তের ভিত্তিতে ডেটা ফিল্টার করতে & (AND), | (OR) এবং ~ (NOT) অপারেটর ব্যবহার করা যায়।
from tinydb import TinyDB, Query
# ডাটাবেস তৈরি
db = TinyDB('db.json')
# ডেটা ইনসার্ট করা
db.insert({'name': 'Aziz', 'age': 30, 'city': 'Dhaka'})
db.insert({'name': 'Mehedi', 'age': 25, 'city': 'Chittagong'})
db.insert({'name': 'Rahim', 'age': 35, 'city': 'Dhaka'})
User = Query()
# Multiple Conditions: age 30 এর বেশি এবং city 'Dhaka'
result = db.search((User.age > 30) & (User.city == 'Dhaka'))
print(result)
# আউটপুট:
# [{'name': 'Rahim', 'age': 35, 'city': 'Dhaka'}]
এখানে & অপারেটরের মাধ্যমে দুটি শর্ত একসঙ্গে যোগ করা হয়েছে।
২. OR Condition (অথবা শর্ত)
| অপারেটরের মাধ্যমে একাধিক শর্তের মধ্যে OR যুক্ত করা যায়, অর্থাৎ দুটি শর্তের যেকোনো একটির পূর্ণতা হলেই ডেটা ফিরিয়ে দিবে।
# OR Condition: city 'Dhaka' অথবা age 30 এর বেশি
result = db.search((User.city == 'Dhaka') | (User.age > 30))
print(result)
# আউটপুট:
# [{'name': 'Aziz', 'age': 30, 'city': 'Dhaka'}, {'name': 'Rahim', 'age': 35, 'city': 'Dhaka'}]
এখানে | অপারেটরের মাধ্যমে দুটি শর্তের মধ্যে OR যুক্ত করা হয়েছে, তাই Dhaka শহর বা age > 30 এর যেকোনো একটি শর্ত পূর্ণ হলেই ডেটা ফেরত আসবে।
৩. NOT Condition (মোট শর্তের বিপরীত)
~ অপারেটর ব্যবহার করে NOT শর্ত তৈরি করা যায়, যা কোনো শর্তের বিপরীত ফলাফল প্রদান করে।
# NOT Condition: city 'Dhaka' নয় এমন ডেটা
result = db.search(~(User.city == 'Dhaka'))
print(result)
# আউটপুট:
# [{'name': 'Mehedi', 'age': 25, 'city': 'Chittagong'}]
এখানে ~ অপারেটর city == 'Dhaka' শর্তের বিপরীত কার্যকর করেছে, ফলে 'Dhaka' শহরের বাইরে থাকা ডেটা ফিরে এসেছে।
৪. Regular Expression (Regex Matching)
TinyDB তে আপনি matches() মেথড ব্যবহার করে স্ট্রিং ক্ষেত্রের মধ্যে রেগুলার এক্সপ্রেশন (Regex) অনুসন্ধান করতে পারেন।
# Regex Matching: নামের মধ্যে 'e' অক্ষর আছে এমন ডেটা
result = db.search(User.name.matches('.*e.*'))
print(result)
# আউটপুট:
# [{'name': 'Mehedi', 'age': 25, 'city': 'Chittagong'}, {'name': 'Rahim', 'age': 35, 'city': 'Dhaka'}]
এখানে matches('.*e.*') রেগুলার এক্সপ্রেশন ব্যবহার করে e অক্ষর থাকা সমস্ত নাম ফিল্টার করা হয়েছে।
Advanced Sorting Techniques
TinyDB তে Sorting করা যেতে পারে order_by() মেথডের মাধ্যমে। আপনি একটি বা একাধিক ক্ষেত্রের ভিত্তিতে ডেটা সাজাতে পারেন।
১. Single Field Sorting
# Age এর ভিত্তিতে ascending (ছোট থেকে বড়) সাজানো
result = db.all()
result.sort(key=lambda x: x['age'])
print(result)
# আউটপুট:
# [{'name': 'Mehedi', 'age': 25, 'city': 'Chittagong'}, {'name': 'Aziz', 'age': 30, 'city': 'Dhaka'}, {'name': 'Rahim', 'age': 35, 'city': 'Dhaka'}]
এখানে sort() মেথড ব্যবহার করে age ফিল্ডের উপর ascending (ছোট থেকে বড়) সাজানো হয়েছে।
২. Descending Sorting
ডেটা descending (বড় থেকে ছোট) সাজানোর জন্য, আপনি reverse=True ব্যবহার করতে পারেন।
# Age এর ভিত্তিতে descending (বড় থেকে ছোট) সাজানো
result = db.all()
result.sort(key=lambda x: x['age'], reverse=True)
print(result)
# আউটপুট:
# [{'name': 'Rahim', 'age': 35, 'city': 'Dhaka'}, {'name': 'Aziz', 'age': 30, 'city': 'Dhaka'}, {'name': 'Mehedi', 'age': 25, 'city': 'Chittagong'}]
এখানে reverse=True যুক্ত করার মাধ্যমে age ফিল্ডের উপর descending সাজানো হয়েছে।
৩. Multiple Field Sorting
একাধিক ফিল্ডের ভিত্তিতে ডেটা সাজানো যেতে পারে। প্রথমে একটি ফিল্ডের উপর সাজানোর পর, দ্বিতীয় ফিল্ডের উপর সাজানো হবে।
# Age এর ভিত্তিতে ascending এবং নামের ভিত্তিতে alphabetical sorting
result = db.all()
result.sort(key=lambda x: (x['age'], x['name']))
print(result)
# আউটপুট:
# [{'name': 'Mehedi', 'age': 25, 'city': 'Chittagong'}, {'name': 'Aziz', 'age': 30, 'city': 'Dhaka'}, {'name': 'Rahim', 'age': 35, 'city': 'Dhaka'}]
এখানে age ফিল্ডের উপর প্রথমে ascending সাজানো হয়েছে এবং এরপর name ফিল্ডের উপর সাজানো হয়েছে।
সারাংশ
TinyDB তে Advanced Filtering এবং Sorting কৌশল ব্যবহার করে ডেটা অনুসন্ধান এবং সাজানো যায় খুব সহজে। আপনি Query ক্লাসের মাধ্যমে জটিল শর্ত তৈরি করতে পারেন এবং search() মেথড ব্যবহার করে ডেটা ফিল্টার করতে পারেন। একইভাবে, Sorting এর জন্য sort() মেথড ব্যবহার করা হয়, যেখানে আপনি একাধিক ক্ষেত্রের ভিত্তিতে ডেটা সাজাতে পারেন। এই কৌশলগুলো TinyDB তে ডেটা পরিচালনাকে আরও সহজ এবং কার্যকরী করে তোলে।
Read more