在 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
如下图所示:
现在,我们使用 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}]}])
执行完毕后,此时,如下图所示:
我们看到,此时提示我们成功插入了三条记录,现在,我们使用 find 对数组进行查询,查询 name 为 cpp 并且 age 为 100 的记录,具体命令如下:
db.haicoder.find({"courses":{$elemMatch:{"name":"cpp", "age":100}}}, {_id:0})
执行完毕后,此时,如下图所示:
我们看到,此时我们匹配了数组的 name 字段和 age 字段都匹配的记录。
在 MongoDB 中,elemMatch 用于查询数组类型的字段的子字段同时必须满足条件,并且在同一条记录中。