MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $lub zapytanie

Użyj $in

W przypadku zapytania w pytaniu bardziej odpowiednie jest użycie $in

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

Dlaczego to nie działa

Brakuje cytatu - CLI czeka, aż skończysz drugą część swojego lub:

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

Musisz zakończyć zapytanie na tyle, aby cli je przeanalizowało i stwierdziło, że wystąpił błąd składni.

Dopasowywanie bez rozróżniania wielkości liter

Jak wskazuje komentarz, jeśli chcesz wyszukiwać bez uwzględniania wielkości liter, użyj $or z $regexem:

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

Lub po prostu użyj jednego wyrażenia regularnego:

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

Jednak zapytanie z wyrażeniem regularnym, które nie zaczyna się od ustalonego ciągu znaków, nie może używać indeksu (nie może używać indeksu i skutecznie „rozpocznij tutaj, dopóki nie zostanie znalezione dopasowanie, a następnie zwolnij”) i dlatego jest nieoptymalne. Jeśli takie jest Twoje wymaganie, lepszym pomysłem jest przechowywanie znormalizowanego pola nazwy (np. name_lc - nazwa małymi literami) i zapytanie o to:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $atanh

  2. Importuj dokumenty do MongoDB z tablicy dokumentów JSON

  3. Sortuj zagnieżdżoną tablicę obiektów

  4. Aktualizacja Mongoose nie aktualizuje się:{ ok:0, n:0, nModified:0 }

  5. Co oznacza zbyt wiele opcji pozycyjnych podczas eksportu mongo?