sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvorfor anbefales det ikke at bruge lagrede funktioner på serversiden i MongoDB?

Jeg er sikker på, at jeg har angivet listen et par gange, selvom Google-søgeresultatet kun er fyldt med folk, der fortæller dig, hvordan du gør det:

  • Det er eval
  • eval har naturlige evner til nemt at blive injiceret, det er som en ikke-PDO-ækvivalent til SQL, hvis du ikke bygger et fuldskala-undslippende bibliotek omkring det, vil det rode dig. Ved at bruge disse funktioner erstatter du effektivt det sikrere modersmål i MongoDB med noget, der er lige så usikkert som enhver gammel SQL derude.
  • Den kræver en global lås og kan tage skrivelås og vil ikke udløses, før handlingen er fuldstændig udført, i modsætning til andre operationer, som vil udløses i visse tilfælde.
  • eval virker kun på Primaries og aldrig noget andet medlem af replikasættet
  • Det kører dybest set, ukontrolleret, et ton JS i en bundtet V8/spidermonkey envo, der kommer med MongoDB med fuld evne til at røre ved enhver del af din database og admin-kommandoer, lyder det sikkert?
  • Det er IKKE MongoDB, og det er heller ikke "MongoDBs SQL", det kører i et indbygget JS-miljø, ikke selve MongoDBs C++-kode (i modsætning til aggregeringsrammerne).
  • På grund af det foregående punkt er det EKSTREMT langsom i forhold til mange andre muligheder, dette gælder for $where også brug.

Det burde være nok til at få dig i gang på denne front.




  1. MongoDB Index Builds – Forhindrer brugere i at udløse nye Builds

  2. Redis under klassisk ASP(VBScript)

  3. Tæl i Spring Data MongoDB-lageret

  4. Hvorfor returnerer mongoose-modellens hasOwnProperty falsk, når egenskaben eksisterer?