在之前的文章中,学习了MongoDB中往表里面插入数据的方法,接下来,让我们一起了解一下在MongoDB中查询数据是怎么样去写的:
查询主要是用find()方法:db.getCollection("user").find(query,projection)
参数说明:
query:查询条件,非必填
projection:设置返回结果中要返回哪些字段,非必填,默认都返回
下面按照mysql中的常见查询的用法来对比学习和记忆相关的用法:
1、查询指定数据库下某个表的所有数据
mysql: | |
select * from study.user | |
mongodb: | |
db.getSiblingDB("study").getCollection("user").find() |
如果已经进入某个数据库后,查询语句可以简化一下:
db.getCollection("user").find() | |
use study; | |
db.user.find() |
2、单字段查询
mysql: | |
select * from user where name = "小博" | |
mongodb: | |
db.user.find({"name":"小博"}) |
3、多字段查询
mysql: | |
select * from user where name = "小博" and age = 18 | |
mongodb: | |
db.user.find({"name":"小博","age":18}) |
4、针对复杂结构的字段查询(文档嵌套文档)
插入数据用于查询:
db.user.insertMany([{"name":"小博测试成长之路" ,"userinfo":{"age":NumberLong(30),"wechat":"xiaobotester"}}, | |
{"name":"李逵" ,"userinfo":{"age":NumberLong(10),"wechat":"xiaobo"}} ]) |
插入数据库后的结构如下:
比如现在想查询userinfo下的age为30的数据,可以使用下面的查询语句:
db.user.find({"userinfo.age":30})
5、指定查询结果只显示哪些字段或者隐藏哪些字段
db.getCollection("user").find(query,projection)
后面的参数projection就可以填入哪些字段要返回或者隐藏:
db.user.find({ } ,{age:1 }) # 只返回age字段,id字段默认均返回 | |
db.user.find({ } ,{age:0 }) # 隐藏age字段不返回 | |
db.user.find({ } ,{age:true ,name:1}) | |
db.user.find({ } ,{age:0 ,name:false}) |
注意:
1、简单点我们可以就用0和1去区分是否隐藏或者只展示某个字段,也可以用true和false去标识。
2、要么隐藏部分字段,要么只展示某些字段(错误用法:针对不同字段,混用)
错误用法: | |
db.user.find({ } ,{age:0 ,name:1}) |
3、针对同一字段,同时设置多个时,以最后面的配置为准
db.user.find({ } ,{age:0 ,age:1}) # 只展示_id和age字段 | |
db.user.find({ } ,{age:1 ,age:0}) # 隐藏age字段不展示 |