মঙ্গো: নির্দিষ্ট ক্ষেত্র নেই এমন আইটেমগুলি সন্ধান করুন


107

মঙ্গোডিবি-তে একটি নির্দিষ্ট ক্ষেত্র নিখোঁজ থাকা কোনও সংকলনে কীভাবে দস্তাবেজগুলি অনুসন্ধান করবেন?

উত্তর:


171

হ্যাঁ, এটি সম্ভব using বিদ্যমান ব্যবহার করে সম্ভব :

db.things.find( { a : { $exists : false } } ); // return if a is missing

যখন সত্য হয়, $ বিদ্যমান ক্ষেত্রটি সহ নথির সাথে মেলে যেখানে ক্ষেত্রের মানটি শূন্য থাকে documents যদি মিথ্যা হয় তবে ক্যোয়ারী কেবলমাত্র সেই দস্তাবেজগুলি ফেরত পাঠায় যা ক্ষেত্রটি ধারণ করে না।


1
সতর্কতা অবলম্বন করুন, $existঅনুসন্ধানগুলি সূচকগুলি ব্যবহার করতে পারে না (দেখুন মংগডবি.আর . / ডিসপ্লে / ডকস /… )।
— থিও

4
@ থিও: মঙ্গোডিবি ২.০ থেকে শুরু করে $ উপস্থিত রয়েছে সূচীগুলি ব্যবহার করতে সক্ষম ( jira.mongodb.org/browse/SERVER-393 )
— দিমিত্রি শেেতনিকোভিচ

আমি মঙ্গয়েডের পক্ষে এই সুযোগে ব্যবহার করার জন্য ছিলাম। দেখে মনে হচ্ছে>scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
— Genkilabs

50

যদি ক্ষেত্রটি অনুপস্থিত বা null(বা এটি কখনও না হয় null) আপনার যদি যত্ন না থাকে তবে আপনি সামান্য খাটো এবং নিরাপদটি ব্যবহার করতে পারেন :

db.things.find( { a : null } ); // return if a is missing or null

এটি নিরাপদ কারণ ক্ষেত্রটি শূন্য থাকলেও $existsফিরে আসবে true, যা প্রায়শই পছন্দসই ফলাফল নয় এবং এনপিইতে ডেকে আনতে পারে।


1
যাইহোক, কেউ কেউ কোডটি পড়তে পারে কারণ এটি ক্ষেত্রের সমান হতে হবে nullএবং অনুপস্থিত নয় বলে এটি ব্যাখ্যা করতে পারে । এটি আসলে অপ্রত্যাশিত আচরণ, কারণ আপনি 0(যা এটিও false) এর জন্য একই কাজ করতে সক্ষম হবেন না , তাই nullএখানেও ব্যতিক্রম। অতএব, সর্বোত্তম অনুশীলনটি হ'ল আরও পড়ার যোগ্য উত্তরগুলি ব্যবহার করে $exists: falseযা অস্পষ্ট নয়। মনে রাখবেন, আপনার সামান্য সংক্ষিপ্ত রূপটি আসলে খাটো নয় তবে যদি এর পিছনে আপনার মন্তব্য থাকতে হয়!
— ইয়েতি

@ ইয়েতি যদি আমার লক্ষ্য ক্ষেত্রের জন্য মূল্য হারিয়েছে এমন সমস্ত বস্তুর সন্ধান করতে হয় a, হয় aহয় nullবা কারণ aএটি অনুপস্থিত থাকে, তবে $existsএটি যথেষ্ট ভাল নয়, কারণ এটি যেখানে aরয়েছে সেখানে ধরা পড়বে না null।
— নীলস্কেপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.