我是MongoDB的新手.它似乎建立在
JavaScript语法之上.为什么它不能使用更清晰的比较运算符,如<和> =而不是$gt和$lte?
在线shell示例:
db.scores.find({a:{‘$gte’:2,’$lte’:4}});
解决方法
我的猜测是,他们常常会忘记引号并写下{a:{>:2}}.在JavaScript和其他一些语言中,写$gte(例如{a:{$gte:2,$lte:4}}和{“a”:{“$gte “:2,”$lte“:4}}.当您在Mongo shell中尝试查询时,这会节省大量的输入.
我不确定你是否在询问这个问题,但让我来解决为什么查询语言看起来不像sql的问题,例如:为什么我们不能将查询写为> = 2&& a< = 4(除了$where where queries).这样做的原因是运行该查询的唯一方法是解析JavaScript并为每个文档运行.使用索引是不可能的,并且每个文档都必须从存储在磁盘上的BSON数据转换为内存中的JavaScript对象(顺便说一下,当你在查询,组或者地图减少). 对查询使用JSON / BSON表示法的优雅之处在于它们是纯数据,可以在客户端和服务器端进行操作和分析.在服务器上,查询永远不会通过JavaScript解释器传递,而是将其提供给查询计划程序,该计划程序将其分开,制定计划并执行它.在客户端上,可以使用客户端语言自己的数据结构构建查询,并仅在传递给服务器时将其转换为通用表示(即BSON).