sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Por qué no se recomienda utilizar funciones almacenadas del lado del servidor en MongoDB?

Estoy seguro de haber indicado la lista un par de veces a pesar de que el resultado de la búsqueda de Google está lleno solo de personas que te dicen cómo hacerlo:

  • Es eval
  • eval tiene habilidades naturales para inyectarse fácilmente, es como un equivalente no PDO de SQL, si no crea una biblioteca de escape a gran escala a su alrededor, lo arruinará. Al usar estas funciones, está reemplazando efectivamente el lenguaje nativo más seguro de MongoDB por algo que es tan inseguro como cualquier SQL antiguo.
  • Se necesita un bloqueo global y puede tomar un bloqueo de escritura y no se liberará hasta que la operación se complete por completo, a diferencia de otras operaciones que se liberarán en ciertos casos.
  • eval solo funciona en Primarios y nunca en ningún otro miembro del conjunto de réplicas
  • Básicamente está ejecutando, sin control, una tonelada de JS en un paquete V8/spidermonkey envo que viene con MongoDB con capacidad total para tocar cualquier parte de su base de datos y comandos de administración, ¿suena seguro?
  • NO es MongoDB y tampoco es "MongoDBs SQL", se ejecuta en un entorno JS integrado, no en el código MongoDBs C++ en sí mismo (a diferencia del marco de agregación).
  • Debido al punto anterior es EXTREMADAMENTE lento en comparación con muchas otras opciones, esto va para $where uso también.

Eso debería ser suficiente para empezar en este frente.