目录
mongodb的查找操作
查找的用法示例
各种操作符
Array类型
其他Query查询
mongodb的其他函数
mongodb的查找操作
db.collection.find(query,field)
参数
query:查询条件,相当于where子句
field:选择要展示的域,不写则展示所有内容
返回值:
返回查找到的文档
参数query:以键值对的形式给出查找条件
示例:查找姓名为lucy的
di.class.find({name:'lucy'})
示例:查找age为18的学生的id
db.collection.find({age:18},'_id')
参数field:表示要展示的域或者不展示的域,域名为键,0为不显示,1为显示
示例:查找所有学生,不展示id
db.collection.find({},{_id:0})
注意:如果设置了某些域为0,那么没有设置的域默认为1
如果设置某些1,其他域为0
_id只有设置为0时才不显示,
_id除了_id,其他域要么只能设置0,要么只能设置1
findOne(query,field)
功能:返回一条数据
参数同find
mongodb的操作符
- 判断操作符
使用$号注明的一个特殊意义字符串。表达某个特殊含义
$eq 等于
$ne 不等于
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
字符串也可以比较大小,大小按ascii编码排序
- 范围操作符:
$in 使用:{age:{$in:[1,20]}}
说明:查找年龄为1或者20的
$nin 跟in是相反的
- 逻辑操作符
逻辑与:$and
使用:使用逗号隔开就是逻辑与
db.collection.find({name:"zhangsan",age:{$gt:18}})
逻辑或: $or
使用:
db.collection.find({$or:[{age:{$gt:18}},{sex:"Man"}]})
逻辑非:$not
示例:查找age不为18的用户的两种方法
db.collection.find({$not:{age:{$eq:18}}})
db.collection.find({age:{$ne:18}})
$ne 操作符 不等于
具体操作看上个例子的第二种方法
$nor:既不。。。也不。。。 not A and not B
查找的用法示例
查找age等于17的用户
db.collection.find({age:{$eq:17}})
查找age大于等于18的用户
db.collection.find({age:{$gte:18}})
查找age为17且男性的用户
db.collection.find({$and:[{age:17},{sex:"m"}]})
查找age范围在18-40的用户或者名字为张三的男性
db.collection.find($or:[{age:{$gt:17},{age:{$lt:41}}},{name:"zhangsan",sex:'Male'}])
查找年龄不大于30,并且名字叫阿宝的用户或者是性别为女的用户
db.collection.find({$or:[{age:{$lt:30},{name:"abao"}},{sex:"Male"}]})
查找年龄小于30或者大于33,并且性别为女的
db.collection.find({$and:[{$or:[{age:{$lt:30}},{age:{$gt:33}}]},{sex:"male"}]})
db.collection.find({$or:[{age:{$gt:33}},{age:{$lt:30}}],{sex:"male"}},{_id:0})
Array类型
表达:使用中括号将一定的数据组织为一种数据结构
说明;
1数组中的数据类型可以不同
2数据是有序的
利用数组插入数据
db.NewClass.insert([{"name":"xiaoHong",'age':9,'score':[92,79,88]},
{"name":"zzj",'age':24,'score':[99,99,99]}])
- 数组的查询:
db.collection.find({score:88})
说明:虽然和普通查询语句一样,但是score是以数组形式存在的,因此,score只要含有88,就会被查询
- 数组的比较查询
db.collection.find({score:{$gt:88}})
说明:只要有一项大于88,就会被查找
- $size通过数组的元素个数查找
示例1:
db.collection.find({score:{$size:2}})
表示查找数组中只有两项数据的用户被查找哦
- $all指明数组中必须同时包含指定项进行搜索
查找score中分数必须包含88和90的用户(还可以有其他数据)
db.collection.find({score:{$all:[88,90]}})
- $slice 取数组的部分进行显示
取数组的部分进行显示,在field中声明
示例:取数组的前两项进行搜索
db.collection.find({},{_id:0,score:{$slice:2}})
示例2:跳过第一项,显示后面两项
db.collection.find({},{_id:0,score:{$slice:[1,2]}})
其他Query查询
- $exists 判断一个域是否存在
查找有sex域的文档
db.collection.find({sex:{$exists:true}},{_id:0})
- $mod 余数查找
查找单数年龄的文档 [2,1]表示除以2余1的
db.collection.find({age:{$mod:[2,1]}})
- $type 数据类型查找
查找age类型不是double类型的文档
db.NewClass.find({age:{$not:{$type:1}}})
注意:类型和别名在官网查看
mongodb的其他函数
- 查找取值范围 distinct()
功能:查看某个域的取值范围
示例:查看集合的年龄的取值范围,如果age为字符串类型,会被单独列举出来
db.NewClass.distinct("age")
- 查找结果格式化 pretty()
示例
db.collection.find().pretty()
- 分页函数 limit(n)
limit(n)
显示查找结果的前n条
- 经常与分页函数搭配使用的跳过函数skip(n)
skip(n)
跳过前n条,显示后面的内容
示例:
跳过前三条
db.collection.find().skip(3)
- 计数函数count()
查找一共有多少条数据
db.collection.find().count()
- 排序函数sort({field:1/-1})
根据年龄大小升序排序
db.collection.find().sort({age:1})
参数:{field:1/-1}
field:域
1:升序
-1:降序
复合排序:当排序域的值相同时,按照第二排序项排序
案例:如果结果集一段数据年龄相等,按照姓名排序
db.collection.find().sort({age:1,name:1})
函数示例
- 查找年龄最小的前三个用户
db.collection.find().sort({age:1}).limit(3)
文档的删除操作:
db.collection.remove(query,justOne)
功能:删除文档
参数
query:筛选数据
jistOne:默认为False,表示删除所有符合条件的文档,如果设置为True则只删除第一条查找到的数据
删除年龄域不是数字的文档
db.collection.remove({age:{$not:{$type:1}}})
删除有sex域的文档
db.collection.remove({sex:{$exists:true}})
删除第一个age为17的文档
db.collection.remove({age:17},{justOne:true})
删除集合所有的内容
db.collection.remove({})
练习
1创建数据库 名字grade
2数据库中创建集合名字class
3集合中插入若干文档格式如下
{name:"zhang",age:10,sex:"m",hobby:["a","b",....]}
年龄插入4-13随便选
hobby可选项draw,,sing,dance,basketball,football,pingpong,running,computer
4查询联系
查看班级所有人信息
db.class.find()
查看年龄大于10岁的学生信息
db.class.find({age:{$gt:10}},{_id:0})
查看年龄8-11岁的学生信息
db.class.find({$and:[{age:{$gte:8}},{age:{$lte:11}}]},{_id:0})
db.class.find({age:{$gte:8},age:{$lte:11}})
找到年龄9岁,且为男生的学生信息
db.class.find({age:9,sex:"m"})
找到年龄小于7岁,或者大于11岁的学生
db.class.find({$or:[{age:{$lt:7},age:{$gt:11}}]})
找到年龄8岁或者11岁的学生
db.class.find({age:{$in:[8,11]}})
找到有2项兴趣爱好的学生
db.class.find({hobby:{$size:2}})
找到喜欢computer的学生
db.class.find({hobby:"computer"})
找到即喜欢画画又喜欢跳舞的学生
db.class.find({hobby:{$all:["draw","dance"]}})
5
统计兴趣爱好有3项的学生人数
db.class.find({hobby:{$size:3}}).count()
找到本班年龄第二大的学生
db.class.find().sort({age:-1}).skip(1).limit(1)
查看学生兴趣爱好的范围
db.distinct('hobby')
找到年龄最小的三个同学
db.class.find().sort({age:1}).limit(3)
删除所有年龄小鱼6岁或者大于12岁的学生
db.class.remove({$or:[{age:{$lt:6}},{age:{$gt:12}}]})
文档的修改
db.collection.update(query,update,upsert,multi)
参数:
query:筛选要修改的文档,相当于where
update:将筛选的文档修改什么内容,相当于set,需要配合修改操作符$set一起使用
upsert:是个布尔值,默认false,表示如果query的文档不存在则不进行任何操作。如果设置为True,则
如果query的文档不存在,就插入set的数据
multi:布尔值,默认false表示一次只更新一条数据,设置为True的话,则修改所有文档
示例:
db.collection.update({name:"xiaobai"},{$set:{name:"xiaohei",age:34}})
db.collection.update({name:"arong"},{$set:{age:29}},{upsert:true})