首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb web shell中的$where不起作用

mongodb web shell中的$where不起作用
EN

Stack Overflow用户
提问于 2014-06-03 17:18:00
回答 2查看 706关注 0票数 0

我有以下一组测试文档,它们是我插入到mongodb中的,当我使用$where查询数据库时,会得到下面的异常

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

知道为什么$where子句不起作用吗?

测试数据:

代码语言:javascript
复制
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'“} );

EN

回答 2

Stack Overflow用户

发布于 2014-06-03 17:21:15

除非确实需要,否则请不要使用运算符。然后请不要使用运算符。

有一个更好的方法:

代码语言:javascript
复制
db.things.find({ "domainName": "test11.com" })

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

即:

  • 进行JavaScript比较,这意味着会产生一个解释器实例来评估条件。正如文档所述,这无疑是比原生代码评估更慢的,丢弃了根据索引测试条件评估的能力,这是由于转换和传输到解释器实例。所以这又是非常糟糕的,对于performance.
  • There is ,这是一个本机实现,它将由本机代码接口支持,它会比调用JavaScript解释器更好地和更快的。如果它现在不存在,那么它将在将来工作。

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

此外,由于您似乎指的是“在线测试外壳”,因此,如果在处理客户端传输的应用编程接口中没有实现禁用JavaScript执行的选项,则会调用对mongod进程可用的选项。

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

票数 0
EN

Stack Overflow用户

发布于 2014-06-03 19:23:12

错误可能会出现,因为在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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24011372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档