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ইমেল সহ, বা কোনও ইমেল ক্ষেত্র ছাড়াই একাধিক রেকর্ড সন্নিবেশ করার অনুমতি দেবে , তবে একই ইমেলের স্ট্রিং সহ নয়।