在之前的文章中,学习了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字段不展示