Default হিসেবে, একটা query একটা matching document-এর প্রতিটা field return করে। একটা projection — find()-এর দ্বিতীয় argument — আপনাকে ঠিক কোন field ফিরে আসে তা বেছে নিতে দেয়, কোনো কারণ ছাড়াই কতটা data নেটওয়ার্ক অতিক্রম করে তা কমায়।
একটা field অন্তর্ভুক্ত করতে এটাকে 1-এ set করুন। একবার আপনি এভাবে অন্তত একটা field অন্তর্ভুক্ত করলে, শুধু explicitly অন্তর্ভুক্ত field (আর _id, বাদ না দিলে) ফিরে আসে:
db.users.find(
{ isActive: true },
{ name: 1, email: 1 }
)
// শুধু _id, name, আর email return করে — আর কিছু নাএর বদলে একটা field বাদ দিতে এটাকে 0-এ set করুন, বাকি সবকিছু রেখে:
db.users.find(
{},
{ passwordHash: 0 }
)
// passwordHash ছাড়া প্রতিটা field return করে_id হলো একমাত্র field যা একটা inclusion projection-এও default হিসেবে সবসময় অন্তর্ভুক্ত থাকে — আপনার দরকার না হলে explicitly এটা বন্ধ করুন:
db.users.find(
{},
{ name: 1, email: 1, _id: 0 }
)_id ছাড়া 1 আর 0 মেশানো যায় না
_id ছাড়া একই projection-এ আপনি inclusion (1) আর exclusion (0) মেশাতে পারবেন না — প্রতি query একটা দিক বেছে নিন। { name: 1, email: 0 } একটা error throw করে।
Network traffic কমানোর বাইরেও, projection হলো password hash-এর মতো sensitive field আপনার application code একটা browser-এ পাঠানো result থেকে বাইরে রাখার standard উপায় — query level-এ সেগুলো বাদ রাখা পরে সেগুলো strip করার কথা মনে রাখার চেয়ে নিরাপদ।