$elemMatch (query)
On this page本页内容
See also: 另请参阅:
Definition定义
$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. See Single Query Condition.$elemMatch
表达式中仅指定一个<query>
条件,并且在$elematch
中未使用$not
或$ne
运算符,则可以省略$elematch
。请参见单一查询条件。
Behavior行为
You cannot specify a不能在$where
expression in an$elemMatch
.$elemMatch
中指定$where
表达式。You cannot specify a不能在$text
query expression in an$elemMatch
.$elemMatch
中指定$text
查询表达式。
Examples实例
Element Match元素匹配
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.有关在数组元素上指定多个条件的详细信息,请参阅指定数组元素的多个条件。
Array of Embedded Documents嵌入式文档数组
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 } ] }
Single Query Condition单一查询条件
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
表达式中指定了一个查询谓词,并且在$elematch
中未使用$not
或$ne
运算符,则可以省略$elematch
。
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
运算符,则省略$elematch
表达式会更改返回的文档。
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"
. The second query returns the documents where all of the products in the results
array are not "xyz"
.results
数组中有一个product
不是"xyz"
的文档。第二个查询返回results
数组中所有product
都不是"xyz"
的文档。
Additional Examples其他示例
For additional examples in querying arrays, see:有关查询数组的其他示例,请参阅:
For additional examples in querying, see:有关查询的其他示例,请参阅: