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

MongoDB $или заявка

Използвайте $in

За заявката във въпроса е по-подходящо да използвате $in

db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );

Защо не работи

Липсва цитат - CLI ви чака да завършите втората част на вашия или:

db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^

Трябва да завършите заявката достатъчно, за да може cli да я анализира, за да каже, че има синтактична грешка.

Съответствие без значение на главни и малки букви

Както е посочено в коментар, ако искате да търсите по начин, който не е чувствителен към малки и големи букви, тогава или използвате $or с $regex:

db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )

Или просто използвате един регулярен израз:

db.Profiles.find ( { "name" : /^(gary|rob)/i } )

Въпреки това, заявка за регулярни изрази, която не започва с фиксиран низ, не може да използва индекс (не може да използва индекс и ефективно да прави „започнете оттук, докато не бъде намерено съвпадение, след което не се откаже“) и следователно е неоптимална. Ако това е вашето изискване, по-добре е да съхраните нормализирано поле за име (напр. name_lc - име с малки букви) и запитване за това:

db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Кой SchemaType в Mongoose е най-добър за времеви печат?

  2. Как използвате Mongoose, без да дефинирате схема?

  3. MongoDB $avg Оператор на конвейер за агрегиране

  4. Проследяване на производителността на MongoDB?

  5. Как да активирате регистриране за Mongoose и драйвера MongoDB Node.JS