$ mongodb web shell无法正常工作

时间:2014-06-03 09:18:00

标签: mongodb find where mongodb-query

我有以下一组测试文档,我插入到mongodb中,当我使用$ where查询数据库获取以下异常时

错误:数据库错误:$ where where query,但没有脚本引擎

任何想法为什么$ where子句不起作用

测试数据:

db.things.save({ "_id" : 1, "domainName" : "test11.com", "hosting" : "hostgator.com" })
db.things.save({ "_id" : 2, "domainName" : "test2.com", "hosting" : "aws.amazon.com"})
db.things.save({ "_id" : 3, "domainName" : "test3.com", "hosting" : "aws.amazon.com" })
db.things.save({ "_id" : 4, "domainName" : "test4.com", "hosting" : "hostgator.com" })
db.things.save({ "_id" : 5, "domainName" : "test5.com", "hosting" : "aws.amazon.com" })
db.things.save({ "_id" : 6, "domainName" : "test6.com", "hosting" : "cloud.google.com" })
db.things.save({ "_id" : 7, "domainName" : "test7.com", "hosting" : "aws.amazon.com" })
db.things.save({ "_id" : 8, "domainName" : "test8.com", "hosting" : "hostgator.com" })
db.things.save({ "_id" : 9, "domainName" : "test9.com", "hosting" : "cloud.google.com" })
db.things.save({ "_id" : 10, "domainName" : "test10.com", "hosting" : "godaddy.com" })

使用的查询:

db.things.find({$ where:“this.domainName =='test11.com'”});

2 个答案:

答案 0 :(得分:0)

除非您绝对需要,否则请不要使用$where运营商。然后请不要使用$where运算符。

有一种更好的方法:

db.things.find({ "domainName": "test11.com" })

这是标准查询表单。你几乎不应该使用$where,如果你认为你这样做,那么请在这里发布你的问题,这样我们就可以让你直截了当。

即:

  • $where进行JavaScript比较,这意味着会生成一个解释器实例来评估条件。毫无疑问,这比其他情况下的本机代码评估更慢

  • $where如文档所述,由于转换和转移到Interpreter实例,因此抛弃了针对索引测试条件评估的能力。所以这又是非常对性能不利。

  • 几乎始终本机实现将由本机代码接口支持,这将实现更好更快可以通过调用JavaScript解释器来实现。如果它现在不存在,那么它将来会有效。

这里的总体观点是,您的查询形式不是必需的,因为它是MongoDB已经以本机方式执行的操作。

此外,由于您似乎指的是“在线测试shell”,因此如果没有在API中另外实现,则会调用mongod进程可用的禁用JavaScript执行的选项。正在处理客户转移。

最后一点是有意义的,以避免可能的黑客利用攻击,但MongoDB通常(在最新版本中)非常安全,因为这样的脚本注入“可以”通过允许在开放环境可用的参数中指定JavaScript来实现

答案 1 :(得分:0)

错误可能即将发生,因为在mongodb服务器上,可能已禁用了服务器端的JavaScript执行,要检查这是否使用sh.status()。

除非绝对必要,否则不应使用“$ where”查询:它们要慢得多 比常规查询。

同时检查这些链接“where”子句如何用于NoSQL注入。

https://support.mongolab.com/entries/23442437-25-March-2013-Disabling-server-side-JavaScript-injection

https://www.owasp.org/index.php/Testing_for_NoSQL_injection