TL; ড
হ্যাঁ, null
অনন্য "আসল" মান প্রয়োগ করার সময়, ক্ষেত্রটি সেট করা আছে বা সংজ্ঞায়িত নয় এমন একাধিক নথি থাকতে পারে ।
প্রয়োজনীয়তা :
- মঙ্গোডিবি v3.2 +।
- আপনার কংক্রিট মান প্রকার (গুলি) অগ্রিম জেনে রাখা (যেমন, সর্বদা একটি
string
বা object
কখন নয় null
)।
আপনি যদি বিবরণে আগ্রহী না হন তবে implementation
বিভাগটি এড়িয়ে যান ।
দীর্ঘ সংস্করণ
@ নোলানের উত্তর পরিপূরক হিসাবে, মঙ্গোডিবি v3.2 দিয়ে শুরু করে আপনি একটি ফিল্টার এক্সপ্রেশন সহ আংশিক অনন্য সূচক ব্যবহার করতে পারেন।
আংশিক ফিল্টার এক্সপ্রেশনটির সীমাবদ্ধতা রয়েছে। এটি কেবল নিম্নলিখিতগুলি অন্তর্ভুক্ত করতে পারে:
- সমতা এক্সপ্রেশন (যেমন ক্ষেত্র: মান বা
$eq
অপারেটর ব্যবহার করে ),
$exists: true
অভিব্যক্তি,
$gt
, $gte
, $lt
, $lte
এক্সপ্রেশন,
$type
এক্সপ্রেশন,
$and
কেবল শীর্ষ স্তরের অপারেটর
এর অর্থ হল তুচ্ছ প্রকাশটি {"yourField"{$ne: null}}
ব্যবহার করা যাবে না।
যাইহোক, ধরে নিলাম যে আপনার ক্ষেত্র সর্বদা একই ধরণের ব্যবহার করে , আপনি একটি $type
এক্সপ্রেশন ব্যবহার করতে পারেন ।
{ field: { $type: <BSON type number> | <String alias> } }
মঙ্গোডিবি v3.6 একাধিক সম্ভাব্য ধরণের নির্দিষ্টকরণের জন্য সমর্থন যোগ করেছে, যা অ্যারে হিসাবে পাস করা যেতে পারে:
{ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }
যার অর্থ এটি যখন একাধিক প্রকারের কোনওরকম হতে পারে তখন মানটি দেয় null
।
অতএব, আমরা যদি email
নীচের উদাহরণে ক্ষেত্রটিকে মান string
বা বলতে, binary data
মানগুলি মানতে চাই তবে একটি উপযুক্ত $type
অভিব্যক্তি হবে:
{email: {$type: ["string", "binData"]}}
বাস্তবায়ন
নকুল
আপনি এটি একটি মঙ্গুজ স্কিমাতে নির্দিষ্ট করতে পারেন:
const UsersSchema = new Schema({
name: {type: String, trim: true, index: true, required: true},
email: {
type: String, trim: true, index: {
unique: true,
partialFilterExpression: {email: {$type: "string"}}
}
}
});
বা এটি সরাসরি সংগ্রহে যোগ করুন (যা দেশীয় নোড.জেএস ড্রাইভার ব্যবহার করে):
User.collection.createIndex("email", {
unique: true,
partialFilterExpression: {
"email": {
$type: "string"
}
}
});
নেটিভ মংডোব ড্রাইভার
ব্যবহার collection.createIndex
db.collection('users').createIndex({
"email": 1
}, {
unique: true,
partialFilterExpression: {
"email": {
$type: "string"
}
}
},
function (err, results) {
// ...
}
);
মংডোব শেল
ব্যবহার db.collection.createIndex
:
db.users.createIndex({
"email": 1
}, {
unique: true,
partialFilterExpression: {
"email": {$type: "string"}
}
})
এটি কোনও null
ইমেল সহ, বা কোনও ইমেল ক্ষেত্র ছাড়াই একাধিক রেকর্ড সন্নিবেশ করার অনুমতি দেবে , তবে একই ইমেলের স্ট্রিং সহ নয়।