funzioni memorizzate in db.system.js ("Procedure memorizzate", quando si desidera chiamare così) è deprecato valutazione. Gli articoli su db.eval shell function e the eval database command hanno un avviso "Deprecato dalla versione 3.0" e the article on server-sided javascript non lo menzionano più. Quindi dovresti evitare di usarlo. Una ragione è che non puoi eseguire una funzione javascript quando usi sharding. Quindi, quando costruisci un'applicazione che richiede l'eval, ne impedisci il ridimensionamento in futuro. Un altro è che le funzioni javascript minano il concetto di autorizzazione. Hanno sempre bisogno di essere eseguiti come admin, il che rende impossibile stabilire un sistema di autorizzazione sano. Ciò è particolarmente problematico dal punto di vista della sicurezza considerando che gli script lato server che utilizzano i dati forniti dall'utente possono potenzialmente essere vulnerabili a iniezioni di script arbitrarie.
Il vantaggio del javascript lato server è che viene eseguito sul server database. Ciò riduce la latenza tra application server e server di database quando è necessario eseguire un numero elevato di query. Ma puoi ottenere lo stesso vantaggio aprendo una shell mongo sul server del database e eseguendola lì.
Il vantaggio di latenza è rilevante solo quando si eseguono più query dallo script. Quando hai una sola query, avrai ancora la latenza quando invochi lo script. Quindi non ottieni nulla se non una complessità inutile.
Non vi è alcun caching aggiuntivo o altra ottimizzazione per javascript lato server.Ancora peggio: verrà rianimato e reinterpretato ogni volta che lo esegui. Quindi potrebbe anche essere più lento di javascript nel server delle applicazioni.
Inoltre, molte query complesse che richiederebbero il supporto di script per implementare solo con find()
spesso può essere espresso utilizzando aggregation che nella maggior parte dei casi, essere di gran lunga più veloce di fare lo stesso con find()
e javascript, perché il quadro di aggregazione è implementato in C++ e ha accesso ai documenti BSON non elaborati.
Mantiene una domanda per post. SO non consente di fare 4 domande contemporaneamente. –
@Salvador Queste domande sono tutte strettamente correlate, vedo poco da spaccare in tre post separati. – deceze
1: No, 2: No, 3: Naturalmente non – Sammaye