补 充 show tables 同 show collections 修改集合名称 db.collectionName.renameCollection('newName') 查找操作 select ... from tablename where ... 指定集合方法 1. db.collectionName. e.g. db.student.find() 2. db.getCollection(collectionName). e.g. db.getCollection('student').find() find(query,{field:0/1}) 功能:查找集合中所有复合要求的文档 参数:query 表示查找条件 相当于 mysql中的where语句 {field:0/1} 展示的域,其中0表示不展示该域 1表示展示该域 返回值:返回查找到的结果 注意:当find()函数不加任何参数,或者只加{}表示查找所有内容 db.collectionName.find() 等价于 select * from tableName findOne(query,{field:0/1}) 功能:查找复合条件的一条文档 参数:同find e.g. db.class2.findOne() 查找所有文档中的第一条符合条件的 选择field进行展示 设置field值,1表示查询结果显示该field,0表示不显示 当写了其中某一个field的值,如果该值为1,那么默认其他field值为0,如果该值设置为0,那么其他的默认为1 db.class3.find({},{_id:0,name:0,sex:0}) * 同时设置多个字段的时候,如果一个设置为0,因为其他的默认为1,再设置其他字段的时候只设置想为0的项即可 * 反之亦然,如果一个设置为1,因为其他的默认为0,再设置其他字段的时候只设置想为1的项即可 _id值比较特殊,如果不显式给出则它的默认值始终为1 如果不加该参数,则默认所有field都显示 query 查找第一个 name 为 zhang的同学 db.class2.findOne({name:'zhang'},{_id:0}) 10:40 比较操作符 $eq 等于 db.class2.find({age:{$eq:12}},{_id:0}) * 等价于 db.class2.find({age:12},{_id:0}) $lt 小于 e.g. db.class2.find({age:{$lt:15}},{_id:0}) * 也可以比较字符串,按照逐位的ascii码值进行比较 $lte 小于等于 e.g. db.class2.find({age:{$lte:12}},{_id:0}) $gt 大于 db.class2.find({age:{$gt:12}},{_id:0}) $gte 大于等于 db.class2.find({age:{$gte:12}},{_id:0}) $ne 不等于 db.class2.find({name:{$ne:'zhang'}},{_id:0}) $in 是否包含 db.class2.find({age:{$in:[10,11,12,13]}},{_id:0}) *只要值在数据范围内的都显示出来 $nin 是否不包含 db.class2.find({age:{$nin:[10,11,12]}},{_id:0}) 逻辑条件组合 $and 逻辑与 db.class2.find({$and:[{name:'zhang'},{sex:'m'}]},{_id:0}) *等价于 db.class2.find({name:'zhang',sex:'m'},{_id:0}) $or 逻辑或 e.g. db.class2.find({$or:[{name:'zhang'},{sex:'m'}]},{_id:0}) $not 逻辑非 db.class2.find({name:{$not:{$eq:'zhang'}}},{_id:0}) $nor 既不也不 db.class2.find({$nor:[{name:'zhang'},{age:11}]},{_id:0}) *查找不满足列表中任意一个条件的文档 条件混合查找 name != 'zhang' and (age == 12 or age == 13) db.class2.find({name:{$ne:'zhang'},$or:[{age:12},{age:13}]}) age > 13 or (name = 'zhang' and sex = 'm') db.class2.find({$or:[{age:{$gt:13}},{name:'zhang',sex:'m'}]},{_id:0}) 数组查找(hobby是一个数组) 查找集合中hobby数组里包含‘song’的文档: db.student.find({hobby:'song'}) 查找集合中hobby数组里同时包含‘song’和‘run’的文档: db.student.find({hobby:{$all:['song','run']}},{_id:0}) 查找一个数组中是否包含一个区间 db.student.find({score:{$elemMatch:{$gt:70,$lte:90}}},{_id:0}) 看score数据中是否有(70,90] 的元素 查找一个数组中包含值得个数 db.student.find({hobby:{$size:2}},{_id:0}) 查找hobby数组中包含2个元素的文档 对数据进行筛选 显示score数组中的前三项 db.student.find({},{_id:0,score:{$slice:3}}) 显示score数组中的跳过前两项的后面三项 db.student.find({},{_id:0,score:{$slice:[2,3]}}) 其他查找条件 查找某个字段存在的记录 查找存在score字段的记录 db.student.find({score:{$exists:true}}) 查找不存在score字段的记录 db.student.find({score:{$exists:false}}) 查找某个域的值 匹配给定除数和余数的记录 查找age 被2除余数是1的记录 db.student.find({age:{$mod:[2,1]}},{_id:0}) 查找某个域指定数据类型的记录 db.student.find({score:{$type:4}},{_id:0}) *在mongo中每种数据类型都匹配了一个整数值 和查找相关的一些函数 查看一个集合中某个域的值都包含哪些(类似于关系型数据库中取出某一列的值) db.collectionName.distinct('col') e.g. 列出student集合中所有name域的取值内容,如果name是一个列表则将所有name列表中的元素进行整合 db.student.distinct('name') pretty() 将find结果格式化显示 db.class3.find().pretty() limit(num) 显示find结果的前num条记录 db.class2.find().limit(2) skip(num) 跳过前num条记录进行显示 db.class2.find().skip(2) count() 统计匹配到的记录的条数 db.class2.find().count() sort({}) 按照指定字段进行排序 {age : 1} 按照age进行升序排列 {age : -1} 按照age进行降序排列 当有多个排序项时为复合排序 db.class2.find({},{_id:0}).sort({age:-1}) db.class2.find({},{_id:0}).sort({age:-1,name:1}) 删除文档 db.collectionNmae.remove(query,justOne) 功能:删除记录 参数: query : 定位要删除的记录 类似mysql中where 详见 查找部分 justOne:如果不加此参数则删除所有符合query (bool) 条件的记录 如果赋值为true或者1 表示只删除第一条符合query的记录 e.g. 删除所有name为‘zhang’的文档 db.class2.remove({name:'zhang'}) 删除第一条age为11的文档 db.class2.remove({age:11},1) 删除全部文档 db.class2.remove({}) 练习: 1. 创建一个数据库 名字为 grade 2. 数据库中创建集合集合名称为 class 3. 向集合中插入若干文档文档结构如下 {name:‘小红’,age:10,sex:‘w’,hobby:['a','b']} 注意并不一定所有同学都有这些域,爱好个数也不相同 4.查找练习: 查看该班所有学生 查看该班所有年级为4岁的学生 查看该班所有年龄大于4岁的学生 find({age:{$gt:4}}) 查看该班所有年龄4--7岁之间的学生 find({age:{$gte:4,$lte:7}}) 查看所有年龄大于4岁并sex是‘m’的学生 find({age:{$gt:4},sex:'m'}) 查看所有年龄小于4岁或者大于7岁的学生 find({$or:[{age:{$lt:4}},{age:{$gt:7}}]}) 查看所有年龄是4岁或者6岁的学生 find({age:{$in:[4,6]}}) 查找所有兴趣爱好有两项的学生 find({hobby:{$size:2}}) 查找兴趣爱好有画画的学生 find({hobby:'画画'}) 查找兴趣爱好既有画画又有跳舞的学生 find({hobby:{$all:['画画',‘跳舞’]}}) 统计兴趣爱好有三项的学生的人数 find({hobby:{$size:3}}).count() 查找本班第二位学生 find().skip(1).limit(1) 将本班学生按年龄升学排列,年龄一样的按姓名升序 统计本班同学兴趣爱好都覆盖哪些范围 db.collectionName.distinct('hobby') 删除所有年龄不到4岁和大于9岁的同学 remove({$or:[{age:{$lt:4}},{age:{$gt:9}}]}) 更新文档 update tablename set .... where .... db.collectionName.update(query,update,upsert,multi) 功能:更新集合中的文档 参数:query 确定要更新的文档 相当于where 用法见查找 update 将文档更新为什么 相当于set... upsert boolean 如果为true 则定位的文档不存在就插入一条新的文档,false相反,默认为false multi boolean 如果为true 则更新所有query定位到的文档,false则更新第一条,默认为false e.g. $set 是一个修改器 将姓名为wangwu的文档age改为20,如果不存在age域则自动添加 db.class3.update({name:'wangwu'},{$set:{age:20}}) 修改所有name为huairen的age为25 db.class3.update({name:'huairen'},{$set:{age:25}},false,true) 如果name为haoren的文档存在则修改其age为27,如果不存在则插入{name:'haoren',age:27} db.class3.update({name:'haoren'},{$set:{age:27}},true,false) 作业: 1.梳理mongo的增删改查操作 2.对常用语句进行练习