数据库命名规范
1.不能是空字符串2.不得含有特殊字符3.应全部小写4.最多64个字节5.数据库名不能与现有系统保留库同名,如admin,local
MongoDB的增删改查
mongoDB中一张表称为一个集合
mongoDB插入数据
db.集合名.insert({}) 数据格式为json,id不能重复,支持多条插入数据库
单条插入数据
db.jerry_collection.insert({x:1})
多条插入数据
for(i=3;i<10;i++)db.jerry_collection.insert({x:i})
mongodb的保存
命令:db.集合名称.save(document)
db.stu.save({_id:ObjectId("5f169b37d74866264ed9a7db"), name:'gj', gender:2})db.stu.save({name:'gj', gender:2})db.stu.find()
MongoDB查询数据
测试数据
db.stu.insert([{"name" : "张三", "hometown" : "长沙", "age" : 20, "gender" : true },{"name" : "老李", "hometown" : "广州", "age" : 18, "gender" : false },{"name" : "王麻子", "hometown" : "北京", "age" : 18, "gender" : false },{"name" : "刘六", "hometown" : "深圳", "age" : 40, "gender" : true },{"name" : "jerry", "hometown" : "长沙", "age" : 16, "gender" : true },{"name" : "小永", "hometown" : "广州", "age" : 45, "gender" : true },{"name" : "老amy", "hometown" : "衡阳", "age" : 18, "gender" : true }])
查询所有数据
db.jerry_collection.find({条件⽂档})
⽅法pretty():将结果格式化
db.集合名称.find({条件⽂档}).pretty()
查询单条数据
db.jerry_collection.findOne({条件⽂档})
带有条件的查询
查询x等于100的数据db.jerry_collection.find({x:100})查询x等于100,y等于99的db.jerry_collection.find({x:100,y:99})
比较运算符
等于:默认是等于判断,没有运算符小于:$lt小于等于:$lte大于:$gt大于等于:$gte查询y大于等于18的数据db.jerryn_collection.find({y:{$gte:18}})
范围运算符
使用$in,$nin判断是否在某个范围内查询年龄为18、28的学生db.jerry_collection.find({age:{$in:[18,28]}})
逻辑运算符
or:使用$or,值为数组,数组中每个元素为jsondb.jerry_collection.find({$or:[{age:{$gt:18}},{gender:false}]})
自定义查询
mongo shell 是一个js的执行环境 使用$where 写一个函数, 返回满足条件的数据
查询年龄大于30的学生db.jerry_collection.find({$where:function() {return this.age>30;}})
查询结果操作
查出的数据求总数
db.jerry_collection.find().count()
limit和skip
limit用于读取指定数量的文档db.jerryn_collection.find().limit(2)skip用于跳过指定数量的文档db.jerry_collection.find().skip(2)limit和skip同时使用db.jerry_collection.find().skip(2).limit(2)
映射
指定返回的字段,如果为1则返回改字段,如果为0则除了改字段外所有字段返回。id如果没写会默认返回
db.jerry_collection.find({},{_id:1})
排序
按照年龄升序排序db.jerry_collection().find().sort({age:1})按照年龄降序排序db.jerry_collection().find().sort({age:-1})
修改数据
db.集合名称.update({query}, {update}, {multi: boolean})
- 参数query:查询条件
- 参数update:更新操作符
- 参数multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新
db.jerry_collection.insert({x:100,y:100,z:100}){ "_id" : ObjectId("59b297dd8fa0c171faae5bc8"), "x" : 100, "y" : 100, "z" : 100 }db.jerry_collection.update({x:100},{y:99})修改后数据变为{ "_id" : ObjectId("59b297dd8fa0c171faae5bc8"), "y" : 99 }部分更新db.jerry_collection.update({x:100},{$set:{y:99}})如果y:100数据不存在,就插入y:101这条数据,第三个参数为truedb.jerry_collection.update({y:100},{y:101},true)更新多条db.jerry_collection.update({y:99},{$set:{y:101}},{multi:true})
删除数据
db.jerry_collection.remove({条件},{justOne:true}) mongoDB为了防止误删除,条件必须写db.jerry_collection.remove() 删除所有数据,索引不会删除db.jerry_collection.remove({x:100})
删除表
db.jerry_collection.drop()
练习
测试数据var persons = [{name:"jim",age:25,email:"75431457@qq.com",c:89,m:96,e:87,country:"USA",books:["JS","C++","EXTJS","MONGODB"]},{name:"tom",age:25,email:"214557457@qq.com",c:75,m:66,e:97,country:"USA",books:["PHP","JAVA","EXTJS","C++"]},{name:"lili",age:26,email:"344521457@qq.com",c:75,m:63,e:97,country:"USA",books:["JS","JAVA","C#","MONGODB"]},{name:"zhangsan",age:27,email:"2145567457@qq.com",c:89,m:86,e:67,country:"China",books:["JS","JAVA","EXTJS","MONGODB"]},{name:"lisi",age:26,email:"274521457@qq.com",c:53,m:96,e:83,country:"China",books:["JS","C#","PHP","MONGODB"]},{name:"wangwu",age:27,email:"65621457@qq.com",c:45,m:65,e:99,country:"China",books:["JS","JAVA","C++","MONGODB"]},{name:"zhaoliu",age:27,email:"214521457@qq.com",c:99,m:96,e:97,country:"China",books:["JS","JAVA","EXTJS","PHP"]},{name:"piaoyingjun",age:26,email:"piaoyingjun@uspcat.com",c:39,m:54,e:53,country:"Korea",books:["JS","C#","EXTJS","MONGODB"]},{name:"lizhenxian",age:27,email:"lizhenxian@uspcat.com",c:35,m:56,e:47,country:"Korea",books:["JS","JAVA","EXTJS","MONGODB"]},{name:"lixiaoli",age:21,email:"lixiaoli@uspcat.com",c:36,m:86,e:32,country:"Korea",books:["JS","JAVA","PHP","MONGODB"]},{name:"zhangsuying",age:22,email:"zhangsuying@uspcat.com",c:45,m:63,e:77,country:"Korea",books:["JS","JAVA","C#","MONGODB"]}]for(var i = 0;i<persons.length;i++){db.persons.insert(persons[i])}var persons = db.persons.find({name:"jim"})while(persons.hasNext()){obj = persons.next();print(obj.books.length)}
题目
1.查询年龄大于25小于27的name,age
2.查询出不是美国的name
3.查询国籍是中国或者美国的学生信息
4.查询语文成绩大于85或者英语成绩大于90的学生信息
5.查询出名字中存在”li”的学生信息
6.查询喜欢看MONGODB和PHP的学生
7.查询第二本书是JAVA的学生信息
8.查询喜欢的书数量是4本的学生
9.查询出persons中一共有多少国家分别是什么
聚合
聚合是基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果

常用的管道
$group:将集合中的文档分组,可用于统计结果$match:过滤数据,只输出符合条件的文档$sort:将输入文档排序后输出$limit:限制聚合管道返回的文档书$skip:跳过指定数量的文档,并返回余下的文档
测试数据
db.stu.insert({name:"a", hometown: '东北', age: 20, gender: true})db.stu.insert({name:"b", hometown: '长沙', age: 18, gender: false})db.stu.insert({name:"c", hometown: '武汉', age: 18, gender: false})db.stu.insert({name:"d", hometown: '华山', age: 40, gender: true})db.stu.insert({name:"e", hometown: '山东', age: 16, gender: true})db.stu.insert({name:"f", hometown: '江苏', age: 45, gender: true})db.stu.insert({name:"g", hometown: '大理', age: 18, gender: true})
表达式
处理输⼊⽂档并输出
语法:表达式:’$列名’
常⽤表达式:
$sum: 计算总和, $sum:1 表示以⼀倍计数$avg: 计算平均值$min: 获取最⼩值$max: 获取最⼤值$push: 在结果⽂档中插⼊值到⼀个数组中$first: 根据资源⽂档的排序获取第⼀个⽂档数据$last: 根据资源⽂档的排序获取最后⼀个⽂档数据
$group
将集合中的文档分组,课用于统计结果
- _id表示分组的依据,使用某个字段的格式为 ‘$字段’
按照gender分组,获取不同组的平均年龄
db.students.aggregate({$group:{_id:'$gender',count:{$sum:1},avg_age:{$avg:"$age"}}})
$match
match是管道命令,能将结果交给后一个管道
查询年龄大于20的学生
db.students.aggregate({$match:{age:{$gt:20}}})
Mongodb创建索引
1. 为什么mongdb需要创建索引
- 加快查询速度
- 进行数据的去重
2. mongodb创建简单的索引方法
- 语法:
db.集合名.ensureIndex({属性:1}),1表示升序, -1表示降序
3. 创建索引前后查询速度对比
测试:插入10万条数据到数据库中
插入数据
for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}
创建索引前
db.test.find({name:'test9999'})db.test.find({name:'test9999'}).explain('executionStats') # 显示查询操作的详细信息
创建索引
db.test.ensureIndex({name:1})
创建索引后
db.test.find({name:'test9999'}).explain('executionStats')
4. 索引的查看
默认情况下_id是集合的索引
查看方式:db.集合名.getIndexes()
5. 删除索引
语法:db.集合名.dropIndex({'索引名称':1})
db.test.dropIndex({name:1})db.test.getIndexes()
