В соответствии с MongoDB документация, не рекомендуется использовать хранимые функции на стороне сервера. В чем причина этого предупреждения?
Почему в MongoDB не рекомендуется использовать хранимые функции на стороне сервера?
Ответ 1
Я уверен, что я изложил этот список пару раз, несмотря на то, что результат поиска Google заполняется только людьми, говорящими вам, как это сделать:
- Это
eval
-
eval
имеет естественные способности, которые легко впрыскиваются, это похоже на не-PDO-эквивалент SQL, если вы не пробуждаете полномасштабную экранирующую библиотеку вокруг него, это испортит вам ситуацию. Используя эти функции, вы эффективно заменяете более безопасный родной язык MongoDB на то, что так же небезопасно, как и любой старый SQL. - Он занимает глобальную блокировку и может принимать блокировку записи и не будет освобождаться до тех пор, пока операция не будет полностью выполнена, в отличие от других операций, которые будут выпущены в определенных случаях.
-
eval
работает только с первичными и никогда не будет членом другого набора реплик - В основном он работает, неконтролируемый, тонна JS в комплекте VO/spidermonkey envo, который поставляется с MongoDB с полной способностью касаться любой части вашей базы данных и команд администратора, делает ли это безопасным?
- Это не MongoDB, и он не является "MongoDBs SQL", он работает внутри встроенной среды JS, а не сам код MongoDBs С++ (в отличие от структуры агрегации).
- Из-за предыдущей точки EXTREMELY медленнее по сравнению со многими другими параметрами, это относится и к использованию
$where
.
Этого должно быть достаточно, чтобы вы начали с этого фронта.