On this page本页内容
$elemMatch
The $elemMatch
operator matches documents that contain an array field with at least one element that matches all the specified query criteria.$elemMatch
运算符将包含数组字段的文档与至少一个匹配所有指定查询条件的元素相匹配。
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
If you specify only a single 如果在<query>
condition in the $elemMatch
expression, and are not using the $not
or $ne
operators inside of $elemMatch
, $elemMatch
can be omitted. $elemMatch
表达式中只指定一个<query>
条件,并且没有在$elem
Match中使用$not
或$ne
运算符,则可以省略$elemMatch
。See Single Query Condition.请参见单个查询条件。
$where
expression in an $elemMatch
.$elemMatch
中指定$where
表达式。$text
query expression in an $elemMatch
.$elemMatch
中指定$text
查询表达式。Given the following documents in the 给出scores
collection:scores
集合中的以下文件:
{ _id: 1, results: [ 82, 85, 88 ] } { _id: 2, results: [ 75, 88, 89 ] }
The following query matches only those documents where the 以下查询仅匹配results
array contains at least one element that is both greater than or equal to 80
and is less than 85
:results
数组包含至少一个大于或等于80且小于85的元素的文档:
db.scores.find( { results: { $elemMatch: { $gte: 80, $lt: 85 } } } )
The query returns the following document since the element 由于元素82
is both greater than or equal to 80
and is less than 85
:82
既大于或等于80
,又小于85
,因此查询返回以下文档:
{ "_id" : 1, "results" : [ 82, 85, 88 ] }
For more information on specifying multiple criteria on array elements, see Specify Multiple Conditions for Array Elements.有关在数组元素上指定多个条件的详细信息,请参阅为数组元素指定多种条件。
This statement inserts documents into the 此语句将文档插入survey
collection:survey
集合:
db.survey.insertMany( [ { "_id": 1, "results": [ { "product": "abc", "score": 10 }, { "product": "xyz", "score": 5 } ] }, { "_id": 2, "results": [ { "product": "abc", "score": 8 }, { "product": "xyz", "score": 7 } ] }, { "_id": 3, "results": [ { "product": "abc", "score": 7 }, { "product": "xyz", "score": 8 } ] }, { "_id": 4, "results": [ { "product": "abc", "score": 7 }, { "product": "def", "score": 8 } ] } ] )
The following query matches only those documents where the 以下查询仅匹配results
array contains at least one element with both product
equal to "xyz"
and score
greater than or equal to 8
:results
数组中至少包含一个元素且product
等于"xyz"
且score
大于或等于8
的文档:
db.survey.find( { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } } )
Specifically, the query matches the following document:具体来说,查询匹配以下文档:
{ "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "xyz", "score" : 8 } ] }
If you specify a single query predicate in the 如果在$elemMatch
expression, and are not using the $not
or $ne
operators inside of $elemMatch
, $elemMatch
can be omitted.$elemMatch
表达式中指定了单个查询谓词,并且没有在$elem
匹配中使用$not
或$ne
运算符,则可以省略$elemMatch
。
The following examples return the same documents.以下示例返回相同的文档。
With 使用$elemMatch
:$elemMatch
:
db.survey.find( { results: { $elemMatch: { product: "xyz" } } } )
Without 没使用$elemMatch
:$elemMatch
:
db.survey.find( { "results.product": "xyz" } )
However, if your 但是,如果$elemMatch
expression contains the $not
or $ne
operators then omitting the $elemMatch
expression changes the documents returned.$elemMatch
表达式包含$not
或$ne
运算符,则省略$elemMatch
表达式会更改返回的文档。
The following examples return different documents.以下示例返回不同的文档。
With 使用$elemMatch
:$elemMatch
:
db.survey.find( { "results": { $elemMatch: { product: { $ne: "xyz" } } } } )
Without 没使用$elemMatch
:$elemMatch
:
db.survey.find( { "results.product": { $ne: "xyz" } } )
With 使用$elemMatch
, the first query returns these documents:$elemMatch
,第一个查询将返回以下文档:
{ "_id" : 1, "results" : [ { "product" : "abc", "score" : 10 }, { "product" : "xyz", "score" : 5 } ] } { "_id" : 2, "results" : [ { "product" : "abc", "score" : 8 }, { "product" : "xyz", "score" : 7 } ] } { "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "xyz", "score" : 8 } ] } { "_id" : 4, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "def", "score" : 8 } ] }
Without 如果没有$elemMatch
, the second query returns this document:$elemMatch
,第二个查询将返回此文档:
{ "_id" : 4, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "def", "score" : 8 } ] }
The first query returns the documents where any product in the 第一个查询返回results
array is not "xyz"
. results
数组中任一个产品不是"xyz"
的文档。The second query returns the documents where all of the products in the 第二个查询返回results
array are not "xyz"
.results
数组中所有产品都不是"xyz"
的文档。
For additional examples in querying arrays, see:有关查询数组的其他示例,请参阅:
For additional examples in querying, see:有关查询的其他示例,请参阅: