$elemMatch(查询)

在本页面

也可以看看 $elemMatch(投影)

定义

  • $elemMatch

    • $elemMatch operator 将包含 array 字段的文档与至少一个与所有指定查询条件匹配的元素进行匹配。
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

如果在$elemMatch表达式中仅指定单个<query>条件,则不需要使用$elemMatch

行为

例子

元素匹配

鉴于scores集合中的以下文档:

{ _id: 1, results: [ 82, 85, 88 ] }
{ _id: 2, results: [ 75, 88, 89 ] }

以下查询仅匹配results array 包含至少一个大于或等于80且小于85的元素的文档。

db.scores.find(
   { results: { $elemMatch: { $gte: 80, $lt: 85 } } }
)

查询返回以下文档,因为元素82大于或等于80且小于85

{ "_id" : 1, "results" : [ 82, 85, 88 ] }

有关在 array 元素上指定多个条件的更多信息,请参阅为 Array Elements 指定多个条件

嵌入式文档阵列

鉴于survey集合中的以下文档:

{ _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 } ] }

以下查询仅匹配results array 包含至少一个元素的文档,其中product等于"xyz"score大于或等于8

db.survey.find(
   { results: { $elemMatch: { product: "xyz", score: { $gte: 8 } } } }
)

具体来说,查询与以下文档匹配:

{ "_id" : 3, "results" : [ { "product" : "abc", "score" : 7 }, { "product" : "xyz", "score" : 8 } ] }

单一查询条件

如果在$elemMatch表达式中指定单个查询谓词,则不需要$elemMatch

对于 example,请考虑以下 example,其中$elemMatch仅指定单个查询谓词{ product: "xyz" }

db.survey.find(
   { results: { $elemMatch: { product: "xyz" } } }
)

由于$elemMatch仅指定单个条件,因此不需要$elemMatch表达式,而是可以使用以下查询:

db.survey.find(
   { "results.product": "xyz" }
)

其他例子

有关查询数组的其他示例,请参阅:

有关查询中的其他示例,请参阅:

也可以看看 db.collection.find()