sql >> Databáze >  >> NoSQL >> MongoDB

$elemmatch nefunguje v MongoDB

V dřívějších verzích by to vůbec nemělo fungovat, protože jste alespoň upravili rozsah this nyní odkazovat na "data" jako na prvek nejvyšší úrovně. Stručně řečeno, toto již není povoleno a opravdu byste neměli používat metody JavaScriptu, pokud to absolutně nemusíte. I v takovém případě pravděpodobně ve většině případů stále existuje lepší způsob.

Ale ve skutečnosti se jedná o zbytečné použití shody JavaScriptu, protože není vyžadováno, pokud existují další operátoři, kteří to provedou.

Měli byste používat $regex místo toho formulář:

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

Nebo kdekoli v poli odeberte stříšku ^ :

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

Což je v podstatě stejně neefektivní jako provádění JavaScriptu, ale ne tak moc, jako není režie zpracování přes tento interpretační engine. A samozřejmě to funguje všude.

Zamyslete se také nad tím, co vlastně dělá dotaz založený na JavaScriptu:

  • Vyvolá instanci interpretu JavaScript
  • Převede typy dokumentů BSON na dokument na typy JavaScript
  • Vyhodnocuje kód JavaScript v interpretu podle dokumentu
  • Odešle JavaScript true|false zpět jako výsledek podle dokumentu

Vzhledem k tomu, že $regex (ale se shodou nerozlišující malá a velká písmena, která není optimální) provádí stejné operace, ale nativně používá knihovnu "pcre" C bez konverze a přetypování na dokument, pak je to jednoznačně rozumná volba.




  1. Jak Trello zpracovává přeuspořádání karet, seznamů, kontrolních seznamů atd

  2. Jak mohu vypsat všechny kolekce v prostředí MongoDB?

  3. node.js moongodb dva nálezy

  4. Porovnejte dvě pole pole ve stejném dokumentu