Amir Alsaeed نشر 18 يونيو 2021 أرسل تقرير نشر 18 يونيو 2021 أحاول تطبيق الاستعلام عن جزء من سلسلة نصية في Mongodb بشكل مشابه للاستعلام LIKE وباستخدام العلامة ( % ) في قواعد البيانات العلائقية sql: SELECT * FROM books WHERE book_title LIKE '%m%' ولكن لم أجد استعلام مشابه له ضمن التوثيق في mongodb. كيف يمكنني الاستفادة من الاستعلامات عن جزء من النص؟ اقتباس
1 Sam Ahw نشر 18 يونيو 2021 أرسل تقرير نشر 18 يونيو 2021 تتيح 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 عبدالله عبدالرحمن11 نشر 18 يونيو 2021 أرسل تقرير نشر 18 يونيو 2021 يمكنك إستخدام هذا الأمر 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 سمير عبود نشر 18 يونيو 2021 أرسل تقرير نشر 18 يونيو 2021 يُمكن الوصول لما تُريد بإستخدام: 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'}}) اقتباس
السؤال
Amir Alsaeed
أحاول تطبيق الاستعلام عن جزء من سلسلة نصية في Mongodb بشكل مشابه للاستعلام LIKE وباستخدام العلامة ( % ) في قواعد البيانات العلائقية sql:
SELECT * FROM books WHERE book_title LIKE '%m%'
ولكن لم أجد استعلام مشابه له ضمن التوثيق في mongodb.
كيف يمكنني الاستفادة من الاستعلامات عن جزء من النص؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.