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

$elemmatch nie działa w MongoDB

W ogóle nie powinno działać we wcześniejszych wersjach, ponieważ przynajmniej zmodyfikowałeś zasięg this teraz odnosić się do „danych” jako elementu najwyższego poziomu. Krótko mówiąc, nie jest to już dozwolone i naprawdę nie powinieneś używać metod JavaScript, chyba że absolutnie musisz. Nawet wtedy w większości przypadków prawdopodobnie nadal istnieje lepszy sposób.

Ale w rzeczywistości jest to niepotrzebne użycie dopasowywania JavaScript, ponieważ nie jest wymagane, gdy istnieją inne operatory, które to zrobią.

Powinieneś używać $regex zamiast tego:

db.docs.find({ "data.First_name": /^kim/i })

Lub gdziekolwiek w polu usuń karetkę ^ :

db.docs.find({ "data.First_name": /kim/i })

Co jest prawie tak nieefektywne, jak wykonywanie JavaScriptu, ale nie tak bardzo, jak nie ma narzutu związanego z przetwarzaniem przez ten silnik interpretera. I oczywiście działa wszędzie.

Zastanów się również, co faktycznie robi zapytanie oparte na JavaScript:

  • Wywołuje instancję interpretera JavaScript
  • Konwertuje typy dokumentów BSON na dokument na typy JavaScript
  • Ocenia kod JavaScript w interpreterze dla każdego dokumentu
  • Przesyła JavaScript true|false z powrotem jako wynik na dokument

Biorąc pod uwagę, że $regex (ale z dopasowaniem nieuwzględniającym wielkości liter, które nie jest optymalne) wykonuje te same operacje, ale używa natywnie biblioteki "pcre" C bez konwersji i ponownego rzutowania na dokument, to oczywiście jest to rozsądny wybór z tych dwóch.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Zaktualizuj zagnieżdżone poddokumenty w MongoDB za pomocą arrayFilters

  2. Bluemix Mongodb:Uwierzytelnienie nie powiodło się

  3. Wbudowany dokument bez tablicy?

  4. MongoDB $in z podzapytanie

  5. Jak usunąć element z obiektu JSON przy użyciu nodeJS?