我注意到一个新的$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,因此相对较晚地添加到文档中.
我能看到的一个特定应用$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由于其他原因需要在那里使用运算符,现在可以允许它.
| 归档时间: |
|
| 查看次数: |
2402 次 |
| 最近记录: |