MongoDB数组子查询elemMatch

MongoDB数组子查询elemMatch

MongoDB 中,elemMatch 用于查询数组类型的字段的子字段同时必须满足条件,并且在同一条记录中。

MongoDB数组子查询elemMatch详解

语法

db_name.collection_name.find({field:{$elemMatch:{subfield1:val1, subfield2:val2}}});

参数

参数 描述
db_name 数据库名
collection_name 集合名
filed 要查询的字段
subfield1 要查询的子字段
val1 子字段等于的值
subfield2 要查询的子字段
val2 子字段等于的值

说明

查询结构体字段的 field 字段的子字段 subfield1 值为 val1 并且 subfield2 值为 val2 的数据。

案例

我们首先,使用 mongo 命令,连接上数据库,具体命令如下:

mongo

如下图所示:

90_mongodb数组子查询eleMatch.png

现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:

use haicoder

现在,我们使用 insertMany 插入三条记录,具体命令如下:

db.haicoder.insertMany([{"url":"haicoder.net", "courses":[{"name":"cpp", "age":100}, {"name":"stl", "age":101}]}, {"url":"m.haicoder.net", "courses":[{"name":"java", "age":90}, {"name":"golang", "age":101}]}])

执行完毕后,此时,如下图所示:

91_mongodb数组子查询eleMatch.png

我们看到,此时提示我们成功插入了三条记录,现在,我们使用 find 对数组进行查询,查询 name 为 cpp 并且 age 为 100 的记录,具体命令如下:

db.haicoder.find({"courses":{$elemMatch:{"name":"cpp", "age":100}}}, {_id:0})

执行完毕后,此时,如下图所示:

92_mongodb数组子查询eleMatch.png

我们看到,此时我们匹配了数组的 name 字段和 age 字段都匹配的记录。

MongoDB数组子查询elemMatch总结

在 MongoDB 中,elemMatch 用于查询数组类型的字段的子字段同时必须满足条件,并且在同一条记录中。