اذهب إلى المحتوى

السؤال

نشر

أحاول تطبيق الاستعلام عن جزء من سلسلة نصية في Mongodb بشكل مشابه للاستعلام LIKE وباستخدام العلامة ( % ) في قواعد البيانات العلائقية sql:

SELECT * FROM books WHERE book_title LIKE '%m%'

ولكن لم أجد استعلام مشابه له ضمن التوثيق في mongodb.

كيف يمكنني الاستفادة من الاستعلامات عن جزء من النص؟

Recommended Posts

  • 1
نشر

تتيح mongodb استخدام التعابير النمطية (Regular Expressions) أو regex في الاستعلامات، والتي تعطي مرونة أكثر في التعامل مع السلاسل النصية لأنها تمكنك من استخدام أي نموذج وتطبيقه ضمن الاستعلام مهما بلغ تعقيده.

يمكنك إجراء الاستعلام باستخدام التعابير النمطية  regex  عن طريق إحاطة الشرط بالعلامة (  / ) كالتالي:

db.books.find({"book_title": /.*m.*/})

أو بشكل مختصر عن القيم /. :

db.books.find({"book_title": /m/})

أو:

db.books.find({'book_title': {'$regex': /m/}})

كما يمكنك التحكّم في حالة الأحرف الصغيرة والكبيرة ضمن هذه الاستعلامات النمطية من خلال إضافة options إلى الاستعلام وإعطائه القيمة ( i ) للتخلي عن التحقق من حالة الحروف ( case insensitive ):

db.books.find({book_title:{'$regex' : /m/, '$options' : 'i'}})

حيث تمثّل القيمة (.*) نفس عمل ( % ) في sql. ويمكنك تطبيق أي نموذج آخر صالح ضمن regex مثل (. + * $ /d /w /S.... إلخ) على استعلامات mongodb بهذه الطريقة من خلال إحاطته بالعلامة ( / )

  • 0
نشر

يمكنك إستخدام هذا الأمر

db.books.find({"book_title": /.*m.*/})

أو إستخدام الأمر التالي وهو يقوم بنفس العمل

db.books.find({"book_title": /m/})

وهذه طريقة آخرى

db.books.find( { name: new RegExp('m', 'i') } );

انت تبحث عن شيء يحتوي m فيه ، وليس شيء يكون m في أوله

ملاحظة إستعلامات mongo تستخدم التعابير الإعتيادية regular expressions

وهنا عدة حلول أخرى

إذا كان يحتوي m

db.books.find({book_title:{'$regex' : 'm', '$options' : 'i'}})

إذا أردت أن يكون غير حساس لحالة الحرف case insensitive

db.books.find({book_title:{'$regex' : '^m$', '$options' : 'i'}})

أما إذا أردت أن يكون الحرف في بداية الكلمة

db.books.find({book_title:{'$regex' : '^m', '$options' : 'i'}})

أما إذا أردت أن يكون الحرف أو النص الذي تبحث عنه في آخر الكلمة

db.books.find({book_title:{'$regex' : '^m', '$options' : 'i'}})

 

  • 0
نشر

يُمكن الوصول لما تُريد بإستخدام:

db.books.find({"book_title": /.*m.*/})

// أو 

db.books.find({"book_title": /m/})

أنت تبحث عن شيء يحتوي على "m". عامل % في SQL يوافق '.*' في التعبيرات النمطية RegEx.

يستخدم MongoDB تعبيرات نمطية أقوى من "LIKE" في SQL. باستخدام التعبيرات النمطية يمكنك إنشاء أي نمط تريد.

فيما يلي أنواع مختلفة من المتطلبات والحلول للبحث عن السلاسل باستخدام التعبيرات النمطية.

تحتوي على string:

db.books.find({book_title:{'$regex' : 'string', '$options' : 'i'}})

لا تحتوي على string:

db.books.find({book_title:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

تبدأ ب string:

db.books.find({book_title:{'$regex' : '^string', '$options' : 'i'}})

تنتهي ب string:

db.books.find({book_title:{'$regex' : 'string$', '$options' : 'i'}})

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...