重复的问题(MongoDB Stored Procedure Equivalent)确实解释了您可以在MongoDB中存储可以通过eval()命令调用的过程,但是,它并没有真正解释为什么这是一件坏事.
Eval可以直接访问一个几乎不受限制的JS环境,该环境是从MongoDB的C++代码调用的.很高兴还提到通过非转义参数注入非常容易.
它们不是在MongoDB自己的运行时内工作的存储过程(与您正在考虑的存储过程不同),JS引擎是从MongoDB运行的,MongoDB不是用JS编程的; 它是用C++编程的.
它们只能从JS上下文中获得,而不是来自MongoDB的C++上下文.
默认情况下,即使使用nolock选项set,它们也可以进行全局锁定,这完全取决于您调用的操作,与本机MongoDB运行时相比,JS本身非常慢.
因此:
我可以使用存储过程吗?在这一层实现小逻辑?
不.它实际上是在第三层实现的,与MongoDB分开.
MongoDB旨在从客户端运行这些东西,有90%的可能性通过使用"存储过程"不会获得任何实际好处.实际上,在许多ACID数据库中,它们被严重滥用并以这样的方式使用,实际上减慢了应用程序的速度并使它们更容易出现故障.因此,您需要仔细考虑是否真的"需要"它们.
| 归档时间: |
|
| 查看次数: |
3206 次 |
| 最近记录: |