2013-03-27 35 views

回答

20

我相信我已经指出,尽管谷歌的搜索结果几次被只与人告诉你该怎么做填充列表:

  • 这是eval
  • eval具有天然的能力很容易被注入,它就像一个非PDO与SQL平衡,如果你没有在它周围布满一个完整的逃逸库,它会搅乱你。通过使用这些函数,您可以有效地替换MongoDB的更安全的本地语言,使其与任何旧SQL一样不安全。
  • 它需要一个全局锁,并且可以进行写锁定,并且在操作完成之前不会释放,与在某些情况下会释放的其他操作不同。
  • eval仅适用于初选,从不复制任何其他成员设置
  • 它基本上运行,未选中,JS的捆绑V8/SpiderMonkey的ENVO每吨附带MongoDB的具有完全的能力去触摸的任何部分你的数据库和管理员命令,这听起来很安全吗?
  • 它不是MongoDB,也不是“MongoDBs SQL”,它运行在内置的JS环境中,而不是MongoDBs C++代码本身(不像聚合框架)。
  • 由于之前的观点,它与其他许多选项相比极其缓慢,这也适用于$where

这应该足以让你开始在这方面。

+0

好的,谢谢!关于本声明:“由于前一点,与其他许多选项相比,速度极慢......”。我相信当你写这篇文章的时候,你的意思是读操作很慢,对吧?我的问题是:我对集合中的每个文档都执行了一个函数,而使用mongodb-nodejs-native驱动程序时,read-update-write确实很慢。对此有何想法? – EdMelo 2013-03-27 21:26:59

+0

@EduardoMelo任何操作,JavaScript的执行速度都比C++代码慢,不仅如此,而且它本身并不会放入JS中,也就是说,启动JS enigne,创建一个线程,然后C++代码通过JS函数由引擎运行。嗯,如果它结束了每一个文件,那么它听起来像是一次性的命令,我会通过与主MongoDB相同的服务器上的控制台来执行此操作。 – Sammaye 2013-03-27 23:19:01

+1

锁定/并发性/性能问题仍然有效吗?目前的文档表明,从版本2.4开始,默认的JavaScript引擎现在“允许多个JavaScript操作同时执行”,而不需要获取锁定。 http://docs.mongodb.org/manual/core/server-side-javascript/ – 2013-06-13 16:15:45

相关问题