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


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.