【发布时间】:2011-05-31 12:06:21
【问题描述】:
我是 MongoDB 新手。它似乎是建立在 JavaScript 语法之上的。为什么不能使用< 和>= 等更清晰的比较运算符来代替$gt 和$lte?
来自在线 shell 的示例:
db.scores.find({a: {'$gte': 2, '$lte': 4}});
【问题讨论】:
标签: javascript mongodb comparison operators
我是 MongoDB 新手。它似乎是建立在 JavaScript 语法之上的。为什么不能使用< 和>= 等更清晰的比较运算符来代替$gt 和$lte?
db.scores.find({a: {'$gte': 2, '$lte': 4}});
【问题讨论】:
标签: javascript mongodb comparison operators
我的猜测是他们觉得你经常会忘记引号并写{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)。
【讨论】:
它允许将 MongoDB 代码嵌入 HTML 或 XML 文档中,而不必与实体(&lt; 和 &gt;)或 CDATA 混淆。
【讨论】: