mongodb 数据库
1.mongodb是一个基于分布式存储的数据库。由c++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
2.优势
易扩展:
大数据量,高性能
灵活的数据模型
3.服务端mongodb的启动:
启动:sudo service mongod start
停止:sudo service mongod stop
重启:sudo service mongod restart
查看是否启动成功:ps ajx|grep mongod
配置文件的位置:/etc/mongod.conf
默认端口:27017
日志的位置:/var/log/mongodb/mongod.log
客户端mongo
4.启动本地客户端:mongo
查看帮助:mongo --help
退出:exit ctrl+c
5.基础命令:
查看当前的数据库: db
查看所有的数据库:show dbs/show databases
查看当前数据库信息:db.stats()
切换数据库: use db_name
删除当前的数据库: db.dropDatabses()
6.不手动创建集合:
向不存在的集合中第一次加入数据时,集合会被创建出来
7.手动创建集合:
db.createCollection('sub',{capped:true,size:10})
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。
查看集合: show collections
查看集合中的元素:db.集合名称.find()
删除集合:db.集合名称.drop()
添加:
db.集合名称.insert(document)
db.student.insert({ 'sname':'zhangsan', 'age':20, 'addr':'baoshengli' })
更新:
db.集合名称.update(<quary>,<update>,{multi:<boolean>})
db.student.update({sname:'caocao'},{$set:{sname:'caozhi'}})
删除:
db.集合名称.remove(<query>,)
db.student.remove({sname:'zhangsan'})
保存:
db.集合名称.save(document)
如果文档的_id已经存在则修改,如果文档的_id不存在则添加
db.stu.save({_id:'20160102','name':'yk',gender:1})
二、数据查询
基本查询:
方法find():查询
db.集合名称.find({条件文档})
方法findOne():查询,只返回第一个
db.集合名称.findOne({条件文档})
方法pretty():将结果格式化
db.集合名称.find({条件文档}).pretty()
比较运算符:
等于,默认是等于判断,没有运算符
小于:$lt
小于或等于:$lte
大于:$gt
大于或等于:$gte
不等于:$ne
db.stu.find({age:{$gte:18}})
逻辑运算符
逻辑与:默认是逻辑与的关系
db.stu.find({age:{$gte:18},gender:1})
逻辑或:使用$or
db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})
and和or一起使用
db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})
范围运算符:
使用"$in","$nin" 判断是否在某个范围内
db.stu.find({age:{$in:[18,28]}})
使用正则表达式
使用//或$regex编写正则表达式
db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}}})
自定义查询:
使用$where后面写一个函数,返回满足条件的数据
查询年龄大于30的学生
db.stu.find({$where:function(){return this.age>30}})
$type的使用--查询指定类型
db.student.find({friends:{$type:'array'}})
limit:
方法limit():用于读取指定数量的文档
db.集合名称.find().limit(number)
查询2条学生信息
db.stu.find().limit(2)
skip:
方法skip():用于跳过指定数量的文档
db.集合名称.find().skip(NUMBER)
查询从第3条开始的学生信息
db.stu.find().skip(2)
一起使用limit和skip
查询第5至8条数据
db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)
投影:
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
对于需要显示的字段,设置为1即可,不设置即为不显示
db.集合名称.find({},{字段名称:1,...})
对于_id列默认是显示的,如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
排序:
方法sort(),用于对结果集进行排序
db.集合名称.find().sort({字段:1,...})
参数1为升序排列
参数-1为降序排列
根据性别降序,再根据年龄升序
db.stu.find().sort({gender:-1,age:1})
统计个数
方法count()用于统计结果集中文档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
统计男生人数
db.stu.find({gender:1}).count()
统计年龄大于20的男生人数
db.stu.count({age:{$gt:20},gender:1})
消除重复
方法distinct()对数据进行去重
db.集合名称.distinct('去重字段',{条件})
查找年龄大于18的性别(去重)
db.stu.distinct('gender',{age:{$gt:18}})
三,聚合aggregate
- 聚合主要用于计算数据,类似sql中的sum(),avg()
- db.集合名称.aggregate([{管道:{表达式}}])
- 常用管道
- $group:将集合中的文档分组,可用于统计结果
- $match:过滤数据,只输出符合条件的文档
- $project:修改输入文档的结构,如:重命名、增加、删除字段
- $sort :将输入文档排序后输出
- $limit :限制聚合管道返回的文档数
- $skip:跳过指定数量的文档,并返回余下的文档
- $unwimd:将数组类型的字段进行拆分
- 表达式
- $sum:计算总和
- $avg:计算平均值
- $min:获取最小值
- $max:获取最大值
- $push:在结果文档中插入值到一个数组中
- $first:根据资源文档的排序获取第一个文档数据
- $last:根据资源文档的排序获取最后一个文档数据
$group的注意点:
- $group对应的字典中有几个键,结果中就有几个键
- 分组依据需要放到`_id`后面
- 取不同的字段的值需要使用`$`, `$gender`, `$age`
- db.stu.aggregate(
{$group:{_id:"gender",count:{$sum:1}}}
)
- 按照gender进行分组,获取不同数据的个数和平均年龄
- db.stu.aggregate(
{$group:{_id:"gender",count:{$sum:1},avg_age:{$avg:"age"}}},
{$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
)
- 按照hometown进行分组,获取不同组的平均年龄
- db.stu.aggregate(
{$group:{_id:"hometown",mean_age:{$avg:"$age"}}}
)
- 按照$group统计整个文档
- db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
)
五、索引
- 在默认情况下索引字段的值可以相同
- 创建唯一索引(索引的值是唯一的)
- 查看当前集合的所有索引:db.t1.getIndexes()
- 删除索引:db.t1.dropIndex({'索引名称':1})
mongodb 的备份与解压
- mongodump -d douban -o ./ ----备份
- mongorestore -d douban2 --dir douban ----解压
六、与python的交互
- 我的:client = MongoClient('mongodb://admin:818919@127.0.0.1:27017/') - 创建客户端链接对象 - client = MongoClient() - print(client) - 创建集合 - course=db.course from pymongo import MongoClient client = MongoClient('mongodb://admin:818919@127.0.0.1:27017/') print(client) db = client.mydb print(db) course = db.course 添加 r = course.insert({'cname': 'python', 'grade': 4}) print(r) course_list = [{'cname':'mysql','grade':3},{'cname':'html','grade':3},{'cname':'javascript','grade':4}] r = course.insert(course_list) print(r) 更新 r = course.update({'cname': 'javascript'}, {'$set': {'grade': 3}}) print(r) 删除 r = course.remove({'cname':'html'}) 查询 r = course.find().sort([('grade',1)]) print(r) for data in r: print(data) Key Binding Resolver Linter Severity Provider Description Line Git GitHub Create Repository Initialize a new project directory with a Git repository Create repository