آموزش مقدماتی پایگاه داده سندگرای مانگو

مانگو  محمدامین ساجدی
Facebooktwittergoogle_pluspinterestlinkedinmail
Print Friendly, PDF & Email

عملگر $not:

نحو این عملگر بصورت زیر می باشد:

{ field: { $not: { <operator-expression> } } }

عملگر $not یک NOT منطقی بر روی <operator-expression> انجام میدهد و داکیومنت هایی را انتخاب می کند که با <operator-expression> تطابق ندارند. همچنین شامل داکیومنت هایی که فیلدها را ندارند نیز می شود.

پرس و جوی زیر را درنظر بگیرید:

db.inventory.find( { price: { $not: { $gt: 1.99 } } } )

این پرس و جو تمامی داکیومنت هایی را انتخاب می کند که شامل موارد زیر باشند:

  • مقدار فیلد price کمتر یا برابر با 99 باشد یا
  • فیلد price اصلا وجود نداشته باشد.

{ $not: { $gt: 1.99 } }  از عملگر $lte متفاوت می باشد. { $lte: 1.99 } تنهای داکیومنت هایی را برمیگرداند که فیلد price وجود داشته باشد و مقدار آن از 1.99 کمتر است.

توجه داشته باشید که عملگر $not تنها  بر دیگر عملگرها تاثیر می گذارد و نمی تواند فیلدها یا داکیومنت ها را بصورت مستقل بررسی کند.

در هنگام استفاده از عملگر $not رفتارهای زیر را درنظر داشته باشید:

  • عملیات عملگر $not مرتبط با عملکرد دیگر عملگرها می باشد اما در کار با برخی از انواع داده یا آرابه ها ممکن است نتایج پیش بینی نشده ای را بدهد.
  • عملگر $not عملیات های شامل عملگر $exists را پشتیبانی نمی کند.

عملگر $or:

عملگر $or یک عملیات or منطقی بر روی آرایه با دو یا بیشتر از دو عبارت انجام می دهد و داکیومنت هایی را انتخاب می کند که حداقل یکی از شرط های ذکر شده درون عبارات را داشته باشند. نحوی عملگر $or بصورت زیر می باشد:

{ $or: [ { <expression1> }, { <expression2> }, … , { <expressionN> } ] }

مثال زیر را درنظر بگیرید:

db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )

این پرس و جو تمامی داکیومنت هایی را که درون مجموعه inventory می باشند و یا دارای فیلد quantity با مقدار کمتر از 20 و یا دارای  فیلد price برابر با 10 داشته باشند را انتخاب می کند.

رفتارها:

عبارت های $or و شاخص ها:

هنگامیکه عبارت های درون $or ارزیابی می شوند، MongoDB مجموعه را تحت اسکن خود قرار می دهد اما اگر تمامی عبارت ها توسط شاخص ها پشتیبانی می شوند MongoDB شاخص ها را ارزیابی می کند که سرعت جستجو را بالاتر می برد.

وقتیکه در یک پرس و جو با عملگر$or  هرعبارت از $or می تواند از شاخص خود استفاده کند. به مثال زیر توجه کنید:

db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )

برای پشتیبانی از این پرس و جو و جلوگیری از ترکیب شدن شاخص ها بایستی یک شاخص برای quantity و یک شاخص هم برای price ایجاد کنید.

db.inventory.ensureIndex( { quantity: 1 } )

db.inventory.ensureIndex( { price: 1 } )

عملگر $or و پرس و جوهای متنی:

درصورتیکه عملگر $or شامل یک متن باشد، تمامی عبارات درون عملگر باید توسط شاخص ها پشتیبانی شوند. این به این خاطر است که $text باید از شاخص استفاده کند چراکه عملگر $or فقط از عباراتی که توسط شاخص ها پشتیبانی می شوند استفاده می کند. اگر $text قادر به استفاده از شاخص نباشد پرس و جو خطا می دهد.

عملگر $or و پرس و جوهای geospatial :

$or supports geospatial clauses with the following exception for the near clause (near clause includes$nearSphere and $near). $or cannot contain a near clause with any other clause.

عملگر $or و عملیات های مرتب سازی:

هنگام اجرای پرس و جوهای $or با تابع sort() مانگو دی بی قادر به استفاده از شاخص هایی که عبارت $or را پشتیبانی می کنند می باشد. نسخه های قبلی از این شاخص ها استفاده نمی کردند.

$or در برابر $in :

هنگامیکه از عملگر $or برای بررسی برابری عبارت درون آن با یکی از فیلدهای موجود بهتر است بجای $or از عملگر $in استفاده کنید.

برای مثال برای انتخاب داکیومنت هایی از مجموعه inventory که فیلد quantity آن دارای مقدار برابر با 20 یا 50 دارند از عملگر $in استفاده می کنیم:

db.inventory.find ( { quantity: { $in: [20, 50] } } )

بدون دیدگاه

ارسال دیدگاه

اجرا شده توسط: همیار وردپرس