我有复杂的js文件,可以进行一些繁重的计算并将结果保存到集合中。 这是用js写的,因为我不想狂热地传输数据。
目前我以这种方式将脚本传递给mongo shell: $ mongodb< path_to_script
该脚本由几个函数组成?
是否可以从PHP执行它? 我看到有'nolock'参数可以传递给evel方法,是否可以在从shell或PHP执行时使用它?
什么是更安全的,使用php执行包装器或从shell执行脚本?
答案 0 :(得分:1)
当你在mongo shell中运行.js文件时,它没有在服务器上运行javascript;它在shell中运行它。您是否在mongo shell脚本中使用服务器端javascript功能,如db.eval和map / reduce?
无论哪种方式,我建议放弃shell脚本和服务器端javascript函数,并使用aggregation framework进行服务器端处理或在PHP应用程序代码中实现逻辑。服务器端javascript具有严重的性能和安全限制,最好尽可能避免使用它。
答案 1 :(得分:0)
您可以使用execute读取js文件并在PHP中执行它,它是eval命令的包装器。可以在参数中添加nolock选项。
$code = file_get_contents('filenam.js');
$db->execute($code, array('nolock' => true));
php执行包装器应该是更安全和更好的解决方案。如果在PHP中使用shell执行js,则需要授予php使用shell_exec()执行shell脚本的权限,如果您使用托管服务并且在主机上没有管理员权限,这是不可能的。