Дублирующий вопрос (MongoDB Stored Procedure Equivalent) объясняет, что вы можете хранить процедуру в MongoDB, которую можно вызвать с помощью команды eval()
, однако на самом деле это не объясняет, почему это плохо.
Eval - это прямой доступ к практически безграничной среде JS, вызванной кодом C++ от MongoDB. Хорошо также упомянуть, что инъекция через несвязанные параметры очень проста.
Это не хранимые процедуры, которые работают в собственной среде выполнения MongoDB (в отличие от хранимых процедур, о которых вы думаете) механизм JS запускается из MongoDB, MongoDB не запрограммирован в JS; он запрограммирован на C++.
Они доступны только из контекста JS, а не из контекста C++ MongoDB.
По умолчанию они могут принимать глобальную блокировку даже с помощью опции nolock
, все зависит от операций, которые вы вызываете, а сам JS очень медленный по сравнению с собственной средой MongoDB.
Как таковой:
Могу ли я использовать ХП. реализовать небольшую логику на этом слое?
Нет. Фактически он реализован на третьем уровне, отдельно от MongoDB.
MongoDB предназначен для запуска этого материала с клиентской стороны, вероятность 90% не будет иметь реальных преимуществ при использовании «хранимых процедур». Фактически во многих базах данных ACID они сильно злоупотребляют и используются таким образом, что фактически замедляет работу приложений и делает их более склонными к сбою. Поэтому вам нужно очень тщательно подумать о том, действительно ли вы «нуждаетесь» в них или нет.
Даже не пытайтесь, они НЕ хранимые процедуры, как в SQL-базах данных – Sammaye