为什么 MongoDB 查询使用 $gt 和 $lte 而不是 >和<=?
我是 MongoDB 新手。它似乎是建立在 JavaScript 语法之上的。为什么它不能使用更清晰的比较运算符,例如 <
和 >=
而不是 $gt
和 $lte
>?
在线 shell 示例:
db.scores.find({a: {'$gte': 2, '$lte': 4}});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我的猜测是,他们觉得您经常会忘记引号并写成
{a: {>: 2}}
。在 JavaScript 和其他一些语言中,在编写$gte
时省略引号是完全可以的(例如{a: {$gte: 2, $lte: 4}}
有效,就像{"a": {"$gte": 2, "$lte": 4}}
一样,当您在 Mongo 中尝试查询时,这可以节省大量输入。 =我不确定您是否在问这个问题,但让我解决一下为什么查询语言看起来不像 SQL 的问题,例如为什么我们不能将查询编写为
a > 2 && a <= 4
(除了$where
查询)。这样做的原因是运行该查询的唯一方法是解析 JavaScript 并运行。对于每个文档,不可能使用索引,并且每个文档都必须从存储在磁盘上的 BSON 数据转换为内存中的 JavaScript 对象(顺便说一句,这就是当您执行$where
查询、组或映射缩减)使用 JSON/BSON 表示法进行查询的优雅之处在于它们是纯数据并且可以在客户端和服务器端进行操作和分析。在服务器上,查询永远不会通过 JavaScript 解释器传递,而是被馈送到查询规划器,该规划器将其分开,制定计划并执行它。在客户端上,可以使用客户端语言自己的数据结构构建查询,并仅在传递到服务器时将其转换为通用表示(即 BSON)。
My guess is that they felt that too often you would forget the quotes and write
{a: {>: 2}}
. In JavaScript, and some other languages, it's perfectly ok to leave out the quotes when writing$gte
(e.g.{a: {$gte: 2, $lte: 4}}
works, as does{"a": {"$gte": 2, "$lte": 4}}
. This saves a lot of typing when you're trying out queries in the Mongo shell.I'm not sure if you're asking about this, but let me tackle the question why the query language doesn't look more like SQL, e.g. why can't we write the query as
a >= 2 && a <= 4
(aside from in$where
queries). The reason for this is that the only way to run that query is to parse the JavaScript and run in for each document. It would be impossible to use indices, and every document would have to be converted from the BSON data stored on disk to a JavaScript object in memory (and by the way, this is what happens when you do a$where
query, a group or a map reduce).The elegance of using JSON/BSON notation for queries is that they are pure data and can be manipulated and analyzed -- both on the client and server sides. On the server the query is never passed through a JavaScript interpreter, rather it is fed to a query planner that picks it apart, formulates a plan and executes it. On the client the query can be built using the client language's own datastructures and converted into a universal representation (i.e. BSON) only when passed to the server.
它允许将 MongoDB 代码嵌入到 HTML 或 XML 文档中,而不必与实体(
<
和>
)或 CDATA 混淆。It allows MongoDB code to be embedded in an HTML or XML document without having to mess with entities (
<
and>
) or CDATA.