MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да заявите документи в mongodb (pymongo), където всички ключови думи съществуват в поле?

Обмислете използването на текстов индекс с $text търсене . Може да е много по-добро решение от използването на регулярни изрази. Търсенето на текст обаче връща документи въз основа на алгоритъм за оценка, така че може да получите някои резултати, които нямат всички ключови думи, които търсите.

Ако не можете или не искате да добавите текстов индекс към това поле, използването на един регулярен израз би било доста трудно, защото не знаете реда, в който се появяват тези думи. Не твърдя, че е невъзможно да се напише, но в крайна сметка ще получите ужасна мерзост дори за стандартите за регулярни изрази. Би било много по-лесно да използвате оператора regex многократно, като използвате $and оператор.

Освен това използването на интервал като разделител ще се провали, когато думата е в началото или края на низа или е последвана от точка или запетая. Използвайте маркера за граница на думата (\b ) вместо това.

collection.find(
    { $and : [
              {'documenttextfield': {'$regex': '\b' +keyword1+'\b'}},
              {'documenttextfield': {'$regex': '\b' +keyword2+'\b'}},
              {'documenttextfield': {'$regex': '\b' +keyword3+'\b'}},
         ]
    });

Имайте предвид, че това е наистина бавна заявка, защото ще изпълни тези три регулярни израза на всеки един документ от колекцията. Когато това е критична за производителността заявка, помислете сериозно дали текстов индекс наистина няма да свърши работа. Ако не успеете, последната сламка, която трябва да хванете, ще бъде да извлечете всякакви ключови думи от documenttextfield поле, което някой може да търси (което може да е всяка уникална дума в него) в ново поле за масив documenttextfield_keywords , създайте нормален индекс в това поле и търсете в това поле с $all оператор (в този случай не се изисква регулярен израз).




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да коригирате MongoError:Не може да се използва сесия, която е приключила

  2. Игнорирайте връзката на MongoDB сокет на Spring Test

  3. Два възела MongoDB набор от реплики без арбитър

  4. MongoDB $toDecimal

  5. MongoDB не е инсталиран правилно на Ubuntu 11.04 в Amazon EC2