我注意到$eq
发布了MongoDB 3.0
运算符,但我不明白它的用途。例如,这两个查询完全相同:
db.users.find({age:21})
和
db.users.find({age:{$eq:21}})
有谁知道为什么这是必要的?
答案 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 ] }
}
}
}
}
])