En cuanto a que la inyección es un problema, como con SQL, el riesgo es significativamente menor... aunque teóricamente posible a través de un vector de ataque desconocido.
Las estructuras de datos y el protocolo son binarios y están impulsados por API en lugar de aprovechar los valores escapados dentro de un lenguaje específico de dominio. Básicamente, no puede simplemente engañar al analizador para que agregue ";db.dropCollection()" al final.
Si solo se usa para consultas, probablemente esté bien... pero aun así te advierto que uses un poco de validación:
- Asegúrese de que solo se utilicen caracteres alfanuméricos (filtre o invalide los valores nulos y cualquier otra cosa que normalmente no aceptaría)
- Hacer cumplir una longitud máxima (como 255 caracteres) por término
- Hacer cumplir una longitud máxima de toda la consulta
- Tira especial nombres de parámetros que comienzan con "$", como "$where" y similares
- No permitir matrices/documentos/hashes anidados... solo cadenas e enteros
Además, tenga en cuenta que una consulta vacía devuelve todo. Es posible que desee un límite en ese valor de retorno. :)