MongoDB-表数据查询的基本用法介绍

MongoDB/NoSQL
425
0
0
2022-12-25
标签   MongoDB

在之前的文章中,学习了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"}} ])

插入数据库后的结构如下:

img

比如现在想查询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字段不展示