با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در این فصل از آموزش های MongoDB ، ما در مورد کوئری های تحت پوشش در MongoDB بحث خواهیم کرد.از آنجا که تمام فیلدهای موجود در کوئری، بخشی از یک index هستند، MongoDB با شرایط کوئری مطابقت دارد و نتیجه را با استفاده از همان index بدون در نظر گرفتن اسناد جستجو می کند.
همانطور که در اسناد MongoDB آمده است ، کوئری های تحت پوشش کوئری است که :
تمام فیلدهای کوئری جزئی از یک index باشند.
تمام فیلدهای بازگشت داده شده در کوئری در یک index هستند.
همچنین از آنجایی که index ها در RAM موجود هستند، داده های استخراج شده از شاخص ها بسیار سریعتر از داده های استخراج شده با اسنادهای اسکن شده می باشند.
برای بررسی کوئری های تحت پوشش، سند زیر را در مجموعه users بررسی کنید :
1 2 3 4 5 6 7 8 | { "_id": ObjectId("53402597d852426020000002"), "contact": "987654321", "dob": "01-01-1991", "gender": "M", "name": "Tom Benzamin", "user_name": "tombenzamin" } |
در قدم اول ترکیب index را برای مجموعه users روی فیلدهای gender و user_name با استفاده از کوئری زیر بسازید :
1 | >db.users.ensureIndex({gender:1,user_name:1}) |
اکنون این index کوئری زیرا پوشش می دهد :
1 | >db.users.find({gender:"M"},{user_name:1,_id:0}) |
بدیهی است که در کوئری بالا، MongoDB به دنبال اسناد پایگاه داده نخواهد بود.
در عوض، داده های مورد نیاز از داده های index شده که بسیار سریع است، می گیرند.
از آنجا که index ما فیلد id را شامل نمی شود، ما به صراحت آن را از مجموعه نتیجه کوئری حذف کرده ایم.
MongoDB به طور پیش فرض فیلد id را در هر کوئری برمی گرداند.
بنابراین کوئری زیر داخل index ایجاد شده بالا پوشش داده نمی شود :
1 | >db.users.find({gender:"M"},{user_name:1}) |
در نهایت، به یاد داشته باشید که یک index نمی تواند کوئری را پوشش دهد که : هر یک از فیلدهای index شده یک آرایه باشد و هر یک از فیلدهای index شده، زیرمجموعه باشد.