$ eq的目的是什么?

时间:2015-03-12 16:01:36

标签: mongodb

我注意到$eq发布了MongoDB 3.0运算符,但我不明白它的用途。例如,这两个查询完全相同:

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

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

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

3 个答案:

答案 0 :(得分:8)

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

{ 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

答案 1 :(得分:5)

我可以看到$eq的一个特定应用程序,例如$not运算符,其中需要,其值为operator-expression

这允许您构建如下的查询:

db.zips.find({state: {$not: {$eq: 'NY'}}})

之前,你在语义上最接近的是:

db.zips.find({state: {$not: {$regex: /^NY$/}}})

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

答案 2 :(得分:0)

在聚合查询的过滤器部分中,如果您需要检查某个字段是否等于某个值,则不能使用分配语法:

db.sales.aggregate([
   {
      $project: {
         items: {
            $filter: {
               input: "$items",
               as: "item",
               cond: { $eq: [ "$$item.price", 100 ] }
            }
         }
      }
   }
])