mongodb 数据库
Posted rungang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于mongodb 数据库的主要内容,如果未能解决你的问题,请参考以下文章
mongodb数据库修复 mongodb数据库丢失恢复 mongodb数据库数据恢复 mongodb数据库文件0kb数据恢复