为什么MongoDB查询使用$ gt和$ lte而不是>和< =?

时间:2010-12-28 09:16:47

标签: javascript mongodb comparison operators

我是MongoDB的新手。它似乎建立在JavaScript语法之上。为什么不能使用更清晰的比较运算符,如<>=而不是$gt$lte

来自在线shell的示例:

db.scores.find({a: {'$gte': 2, '$lte': 4}});

2 个答案:

答案 0 :(得分:8)

我的猜测是他们觉得你经常忘记引号并写{a: {>: 2}}。在JavaScript和其他一些语言中,在编写$gte时(例如{a: {$gte: 2, $lte: 4}}可以正常工作,{"a": {"$gte": 2, "$lte": 4}}也可以省略引号。)这样可以节省大量的输入内容。在Mongo shell中尝试查询。

我不确定你是否在询问这个问题,但让我来解决为什么查询语言看起来不像SQL的问题,例如:为什么我们不能将查询编写为a >= 2 && a <= 4(除了$where查询)。这样做的原因是运行该查询的唯一方法是解析JavaScript并为每个文档运行。使用索引是不可能的,并且每个文档都必须从存储在磁盘上的BSON数据转换为内存中的JavaScript对象(顺便说一下,当你进行$where查询时会发生这种情况,一组或一张地图缩小)。

对查询使用JSON / BSON表示法的优雅之处在于它们是纯数据,可以在客户端和服务器端进行操作和分析。在服务器上,查询永远不会通过JavaScript解释器传递,而是将其提供给查询计划程序,该计划程序将其分开,制定计划并执行它。在客户端上,可以使用客户端语言自己的数据结构构建查询,并仅在传递给服务器时将其转换为通用表示(即BSON)。

答案 1 :(得分:5)

它允许将MongoDB代码嵌入到HTML或XML文档中,而不必混淆实体(&lt;&gt;)或CDATA。