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

Proč se v MongoDB nedoporučuje používat funkce uložené na straně serveru?

Jsem si jistý, že jsem seznam uvedl několikrát, přestože výsledek vyhledávání Google je zaplněn pouze lidmi, kteří vám říkají, jak to udělat:

  • Je eval
  • eval má přirozené schopnosti snadno se injektovat, je to jako ne-PDO ekvivalent k SQL, pokud kolem něj nevybudujete plnohodnotnou únikovou knihovnu, bude vás zmatkovat. Používáním těchto funkcí efektivně nahrazujete bezpečnější nativní jazyk MongoDB něčím, co je stejně nejisté jako jakýkoli starý SQL.
  • Na rozdíl od jiných operací, které se v určitých případech uvolní, je potřeba globální zámek a může se zablokovat zápis a neuvolní se, dokud není operace úplně dokončena.
  • eval funguje pouze na Primary a nikdy na žádném jiném členu sady replik
  • V podstatě běží, nekontrolováno, tuna JS v přibaleném V8/spidermonkey envo, které je dodáváno s MongoDB s plnou schopností dotýkat se jakékoli části vaší databáze a příkazů správce, zní to bezpečně?
  • NENÍ MongoDB a ani to není „MongoDBs SQL“, běží v rámci integrovaného prostředí JS, nikoli samotného kódu MongoDBs C++ (na rozdíl od agregačního rámce).
  • Vzhledem k předchozímu bodu je ve srovnání s mnoha jinými možnostmi EXTRÉMNĚ pomalý, to platí pro $where použití také.

To by vám mělo stačit, abyste na této frontě začali.




  1. nodejs, redis. zkontrolujte, zda klíče existují, a pokud ne, vytvořte nové

  2. Pymongo / MongoDB:vytvořit index nebo zajistit index?

  3. Agregát MongoDB v rámci denního seskupení

  4. Jak používat $unset a $set v kombinaci v mongoDB