$ eq的目的是什么?

jwe*_*rre 11 mongodb

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

db.users.find({age:21})
Run Code Online (Sandbox Code Playgroud)

db.users.find({age:{$eq:21}})
Run Code Online (Sandbox Code Playgroud)

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

mne*_*syn 10

问题是当你有某种查询构建器时,你必须以不同于比较的方式处理相等性,所以它就是这样

{ a : { $gt : 3 } }
{ a : { $lt : 3 } }
Run Code Online (Sandbox Code Playgroud)

{ a : 3 }
Run Code Online (Sandbox Code Playgroud)

因为平等,看起来完全不同.$not正如JohnnyHK已经指出的那样,这同样适用于组成.此外,与$eq您相比,您$可以避免使用-escape用户提供的字符串.因此,人们要求在语法上更接近并且实施的替代方案.Jira票证包含更长的讨论,提到所有这些点.

如果要实现这样的特性,那么$eq运算符的更清晰的语法在聚合框架中也可能有意义来比较两个字段.

此外,该功能显然已经存在2.5,因此相对较晚地添加到文档中.


Joh*_*yHK 6

我能看到的一个特定应用$eq是像$not运算符这样的情况,它要求它的值是一个operator-expression.

这允许您构造一个类似的查询:

db.zips.find({state: {$not: {$eq: 'NY'}}})
Run Code Online (Sandbox Code Playgroud)

以前,你最接近这个语义的是:

db.zips.find({state: {$not: {$regex: /^NY$/}}})
Run Code Online (Sandbox Code Playgroud)

我意识到还有其他方法可以表示该查询的功能,但是如果$not由于其他原因需要在那里使用运算符,现在可以允许它.

  • 但这很奇怪.我认为这个操作员已存在很长时间了. (2认同)
  • @SergioTulentsev它一直在那里.唯一新的是文档.所以所有回复都很有趣. (2认同)