我想让我的mongoDB更安全。我读过,我可以用--noscripting来拒绝JavaScript。我试图验证,这是有效的。
当我像这样启动数据库时
mongod --dbpath /var/lib/mongodb --noscripting --fork --logpath /var/log/mongodb/mongod.log
然后我尝试使用$ where-Operator,如下所述:
http://docs.mongodb.org/manual/reference/operator/query/where/
例如:
db.myCollection.find({$ where:“_ id == 1”})
它正在回归:
Error: error: {
"$err" : "Can't canonicalize query: BadValue no globalScriptEngine in $where parsing",
"code" : 17287
}
我应该期待这个答案吗?还是指向另一次失败?
答案 0 :(得分:3)
这是预期的行为,因为--noscripting
选项禁用了脚本引擎,所有$where
运算符都是JavaScript评估,如官方文档中所述;
使用$ where运算符将包含JavaScript表达式或完整JavaScript函数的字符串传递给查询系统。 $ where提供了更大的灵活性,但要求数据库处理集合中每个文档的JavaScript表达式或函数。使用this或obj。
在JavaScript表达式或函数中引用该文档
此外,错误信息非常清楚。
...“$ err”:“无法规范化查询:BadValue在$解析中没有globalScriptEngine”
请注意消息的 no globalScriptEngine 部分。