MongoDB-এ ভিউ (View) তৈরি করতে createView() মেথড ব্যবহার করা হয়। ভিউ হলো একটি ভার্চুয়াল কালেকশন যা অন্য কালেকশনের ওপর অ্যাগ্রিগেশন পাইপলাইন ডিফাইন করে থাকে - ফিজিক্যালি ডেটা স্টোর করে না।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo113.insertOne({
... _id: 1,
... StudentId: "101",
... "Details": { Name: "Chris", Age: 21 },
... Subject: "MySQL"
... });
{ "acknowledged" : true, "insertedId" : 1 }
সব ডকুমেন্ট দেখানো
> db.demo113.find().pretty();
আউটপুট:
{ "_id" : 1, "StudentId" : "101", "Details" : { "Name" : "Chris", "Age" : 21 }, "Subject" : "MySQL" }
ভিউ তৈরির কোয়ারী
createView মেথডে ভিউ নাম, সোর্স কালেকশন, এবং অ্যাগ্রিগেশন পাইপলাইন দেওয়া হয়েছে:
> db.createView(
... "firstView",
... "demo113",
... [ { $project: { "Name": "$Details.Name", Subject: 1 } } ]
... );
{ "ok" : 1 }
ভিউ থেকে ডেটা ফেচ করা
> db.firstView.find();
আউটপুট:
{ "_id" : 1, "Subject" : "MySQL", "Name" : "Chris" }
ব্যাখ্যা:
firstView- ভিউর নামdemo113- সোর্স কালেকশন[{ $project: { "Name": "$Details.Name", Subject: 1 } }]- পাইপলাইন: নেস্টেডDetails.Nameকে টপ-লেভেলNameবানানো এবংSubjectরাখা
ভিউয়ের বৈশিষ্ট্য:
- রিড-অনলি: ভিউতে সরাসরি ইনসার্ট/আপডেট/ডিলিট করা যায় না
- রিয়েল-টাইম: সোর্স কালেকশন চেঞ্জ হলে ভিউও অটোমেটিক আপডেট হয়
- নো স্টোরেজ: ডেটা ডুপ্লিকেট হয় না, কোয়েরি টাইমে কম্পিউট হয়
- সিকিউরিটি: সংবেদনশীল ফিল্ড হাইড করে লিমিটেড ফিল্ড এক্সপোজ করতে ব্যবহার করা হয়
ভিউ লিস্ট করা: db.getCollectionInfos({type: "view"})
ভিউ ড্রপ করা: db.firstView.drop()
পারফরম্যান্স নোট: ভিউর ওপর ইনডেক্স তৈরি করা যায় না। কমপ্লেক্স পাইপলাইনের জন্য সোর্স কালেকশনে প্রপার ইনডেক্স থাকা জরুরি।