$eq
On this page本页内容
$eq
-
Specifies equality condition.指定相等条件。The$eq
operator matches documents where the value of a field equals the specified value.$eq
运算符匹配字段值等于指定值的文档。{ <field>: { $eq: <value> } }
Specifying the指定$eq
operator is equivalent to using the form{ field: <value> }
except when the<value>
is a regular expression.$eq
运算符等同于使用形式{ field: <value> }
,除非<value>
是正则表达式。See below for examples.请参阅以下示例。
Behavior行为
Comparison Order比较顺序
For comparison of different BSON type values, see the specified BSON comparison order.有关不同BSON类型值的比较,请参阅指定的BSON比较顺序。
Match a Document Value匹配文档值
If the specified 如果指定的<value>
is a document, the order of the fields in the document matters.<value>
是文档,则文档中字段的顺序很重要。
Match an Array Value匹配数组值
If the specified 如果指定的<value>
is an array, MongoDB matches documents where the <field>
matches the array exactly or the <field>
contains an element that matches the array exactly. <value>
是一个数组,MongoDB会匹配<field>
与数组完全匹配的文档,或者<field>
包含与数组完全相匹配的元素。The order of the elements matters. 元素的顺序很重要。For an example, see Equals an Array Value.有关示例,请参阅等于数组值。
Match a Regular Expression匹配正则表达式
The expression 表达式{ field: <value> }
implicitly specifies a match on <value>
. MongoDB translates the implicit match to a more explicit form.{ field: <value> }
隐式指定<value>
上的匹配项。MongoDB将隐式匹配转换为更显式的形式。
When the 当<value>
is fixed, like a particular string, the expression is equivalent to using the $eq
operator { field: { $eq: <value> } }
.<value>
是固定的时,就像一个特定的字符串一样,该表达式等效于使用$eq
运算符{ field: { $eq: <value> } }
。
If 如果<value>
is a regular expression, the statement is expanded using the $regex
operator { field: { $regex: <value> } }
.<value>
是正则表达式,则使用$regex
运算符{ field: { $regex: <value> } }
展开该语句。
For examples illustrating this behaviour, see Regex Match Behaviour.有关说明此行为的示例,请参阅正则表达式匹配行为。
Security Implications安全影响
Always use the explicit form 始终使用显式形式{ field: { $eq: <value> } }
with user-supplied input to avoid problems with maliciously formed queries.{ field: { $eq: <value> } }
和用户提供的输入,以避免恶意形式的查询出现问题。
Examples实例
The following examples query against the 以下示例使用以下文档查询inventory
collection with the following documents:inventory
集合:
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Equals a Specified Value等于指定值
The following example queries the 以下示例查询inventory
collection to select all documents where the value of the qty
field equals 20
:inventory
集合以选择qty
字段值等于20
的所有文档:
db.inventory.find( { qty: { $eq: 20 } } )
The query is equivalent to:该查询等效于:
db.inventory.find( { qty: 20 } )
Both queries match the following documents:两个查询都与以下文档匹配:
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Field in Embedded Document Equals a Value嵌入文档中的字段等于一个值
The following example queries the 以下示例查询inventory
collection to select all documents where the value of the name
field in the item
document equals "ab"
. inventory
集合以选择item
文档中name
字段值等于"ab"
的所有文档。To specify a condition on a field in an embedded document, use the dot notation.若要在嵌入文档中的字段上指定条件,请使用点表示法。
db.inventory.find( { "item.name": { $eq: "ab" } } )
The query is equivalent to:该查询等效于:
db.inventory.find( { "item.name": "ab" } )
Both queries match the following document:两个查询都与以下文档匹配:
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
See also: 另请参阅:
Array Element Equals a Value数组元素等于一个值
The following example queries the 以下示例查询inventory
collection to select all documents where the tags
array contains an element with the value "B"
inventory
集合以选择tags
数组包含值为"B"
的元素的所有文档[1]:
db.inventory.find( { tags: { $eq: "B" } } )
The query is equivalent to:该查询等效于:
db.inventory.find( { tags: "B" } )
Both queries match the following documents:两个查询都与以下文档匹配:
{ _id: 1, item: { name: "ab", code: "123" }, qty: 15, tags: [ "A", "B", "C" ] }
{ _id: 2, item: { name: "cd", code: "123" }, qty: 20, tags: [ "B" ] }
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 4, item: { name: "xy", code: "456" }, qty: 30, tags: [ "B", "A" ] }
See also: 另请参阅:
[1] | tags field is the string "B" .tags 字段的值为字符串"B" 的文档。 |
Equals an Array Value等于数组值
The following example queries the 以下示例查询inventory
collection to select all documents where the tags
array equals exactly the specified array or the tags
array contains an element that equals the array [ "A", "B" ]
.inventory
集合以选择所有文档,其中tags
数组恰好等于指定数组,或者标记数组包含等于数组[ "A", "B" ]
的元素。
db.inventory.find( { tags: { $eq: [ "A", "B" ] } } )
The query is equivalent to:该查询等效于:
db.inventory.find( { tags: [ "A", "B" ] } )
Both queries match the following documents:两个查询都与以下文档匹配:
{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] }
{ _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] }
Regex Match Behaviour正则表达式匹配行为
The following examples demonstrate the differences in behavior between implicit and explicit regular expression matching. Consider a collection with these documents:以下示例演示了隐式和显式正则表达式匹配之间的行为差异。考虑以下文档的集合:
{ _id: 001, company: "MongoDB" }
{ _id: 002, company: "MongoDB2" }
$eq match on a string字符串上的$eq
匹配-
A string expands to return the same values whether an implicit match or an explicit use of字符串展开以返回相同的值,无论是隐式匹配还是显式使用$eq
. Both of these queries:$eq
。这两个查询:db.collection.find( { company: "MongoDB" }, {_id: 0 })
db.collection.find( { company: { $eq: "MongoDB" } }, {_id: 0 } )return the following result:返回以下结果:{ "company" : "MongoDB" }
$eq match on a regular expression正则表达式上的$eq
匹配-
An explicit query using使用$eq
and a regular expression will only match an object which is also a regular expresssion.$eq
和正则表达式的显式查询将只匹配也是正则表达式的对象。The example query won't return anything since values in the示例查询不会返回任何内容,因为company
field are strings.company
字段中的值是字符串。db.collection.find( { company: { $eq: /MongoDB/ } }, {_id: 0 } )
Regular expression matches正则表达式匹配-
A query with an implicit match against a regular expression is equivalent to a making a query with the与正则表达式进行隐式匹配的查询相当于使用$regex
operator. Both of these queries:$regex
运算符进行查询。这两个查询:db.collection.find( { company: /MongoDB/ }, {_id: 0 })
db.collection.find( { company: { $regex: /MongoDB/ } }, {_id: 0 } )return the same results:返回相同的结果:{ "company" : "MongoDB" }
{ "company" : "MongoDB2" }