我注意到一个新的$eq运营商发布了MongoDB 3.0,我不明白它的目的.例如,这两个查询完全相同:

db.users.find({age:21})

db.users.find({age:{$eq:21}})

有人知道为什么这是必要的吗?

推荐答案

问题是,当您使用某种查询生成器时,您必须以不同于比较的方式处理等式,因此

{ a : { $gt : 3 } }
{ a : { $lt : 3 } }

但是

{ a : 3 }

为了平等,这看起来完全不同.正如JohnnyHK已经指出的,这同样适用于$not的合成.此外,与$eq相比,您无需对用户提供的字符串进行$次转义.因此,asked for alternatives that are syntactically closer人参与进来,并得到了实施.Jira罚单包含了一个较长的讨论,其中提到了所有这些要点.

$eq运算符的更清晰语法在聚合框架中也可能有意义,以比较两个字段(如果实现了such a feature).

而且,这一功能显然是从2.5版开始出现的,当时是added to the documentation relatively late版.

Mongodb相关问答推荐

MongoDB Aggregate-如何在条件中替换字符串中的变量

MongoDB(Mongoose)条件判断没有像我预期的那样工作

MongoDB获取所有文档谁的S子文档只包含一个特定值?

如何在Mongo中查找数组中的特定对象

无法配置数据源:未指定url属性,无法为 MongoDb 配置嵌入数据源

MongoDb $filter,然后获取非重复计数

MongoDB聚合:如何将查找结果放入嵌套数组中?

使用 mgo 从 golang 中的 Mongodb 中 Select 列

findOneAndUpdate 和 findOneAndReplace 有什么区别?

pymongo 排序和 find_one 问题

spring-data-mongo - 可选查询参数?

如何在array.NET驱动程序中的元素属性上创建MongoDB MultiKey索引

Python - Pymongo 插入和更新文档

MongoDB 查找精确的数组匹配,但顺序无关紧要

MongoDB Java API:put() 与 append()

MongoDB 范围查询中 $lt 和 $gt 的顺序

无法连接到远程服务器上的 mongo

pre save和validate之间的mongoose区别?什么时候用哪一个?

无法使用命令写入模式错误,降级到兼容模式

MongoError:failed to connect to server [localhost:27017] on first connect