MongoDB简介和启动
NoSQL数据库
NoSQL数据库:Not only sql,指代非关系型数据库
优点:高可扩展性、分布式计算、低成本、灵活架构、半结构化数据、简化关联关系
缺点:没有标准化、有限查询、不直观
windows下启动MongoDB
# 命令行输入mongod --dbpath (mongo中data文件下的db文件路径)
D:\mongoDB\mongodb-win32-x86_64-2008plus-ssl-3.2.16-10-g281b824\bin>mongod --dbp
ath D:\mongoDB\mongodb-win32-x86_64-2008plus-ssl-3.2.16-10-g281b824\data\db
MongoDB将数据储存为一个文档,数据由key=value的键值对方式储存,
数据库[db]-->集合[collection]-->文档-->域
MongoDB常用语法
show dbs #查看所有数据库
use users #进入users数据库,如果users不存在也会进入但是不会创建,
#但是在这个数据库进行数据的操作后,users将被自动创建
db.dropDatabase() #删除进入的这个数据库
show collections #展示所有集合
db.createCollections("users") #创建一个名为users的集合
db.users.drop() #删除users集合
MongoDB数据的增删改
db.users.insert({id:1,name:"tom"}) # 插入数据,集合如果没有创建会自动创建
db.users.find()
# 查找所有数据,这是我们可以看到每一个域前都有一个文档id:_id,可以自定义_id的值
db.users.update({name:”tom”}, {name:”jerry”})
#更新满足name="tom"的文档,整个文档除了_id不会改变都会变化
db.users.update({name:”tom”}, {$set:{name:”jerry”}})
#更新满足条件的文档中域名为"name"的值,只会改变name
db.users.update({条件}, {$set:{name:”people”}}, {multi:true})
#更新符合条件的多行文档中对应的域
db.users.remove({name:"tom"}) #删除name域名值为tom的文档
db.users.remove({name:"people"}{justOne:false}) #删除所有name域名值为people的文档
MongoDB的查询操作
MongoDB的查询主要就是两个方法
db.<集合名字>.find([{条件1},{条件2},...]).pretty()—————查询全部
db.<集合名字>.findOne([{条件1},{条件2},...]).limit(5)———查询满足条件的第一个
.pretty()是将查询到的数据格式化
.limit(num)是限制查询的条数
.skip(行数)是跳行查询
.sort([{域名1:1/-1},{域名2:1/-1}])是升/降序排序,可以指定多个,
所以主要是掌握MongoDB自带的条件算符和方法
# 查询年龄小于/小于等于/大于/大于等于的所有文档
db.users.find({age:{$lt/$lte/$gt/$gte:20}})
# 查询年龄小于15,或者年龄大于20的所有文档,与条件直接写在条件列表中,或条件需要
# {$or:[{条件1},{条件2}]}
db.users.find({$or:[{age:{$lt:15}},{age:{$gt:20}}]})
# 查询年龄在/不在10~15之间的所有文档
db.users.find({age:{$in/$nin:[10,15]}})
# 查询名字中以t开头,以m结尾的所有文档(正则查询)
db.users.find({name:/^t\w.*m$/}) or db.users.find({name:{$regex:"^t\w.*m$"}})
MongoDB的去重
MongoDB自带了去重操作,可以指定域
db.users.distinct("age",{条件}) #将users集合中的age域去重
MongoDB的主从双备(我也只是了解点QwQ)
什么是复制
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。复制还允许从硬件故障和服务中断中恢复数据
为什么要复制
◆数据备份
◆数据灾难恢复
◆读写分离
◆高(24* 7)数据可用性
◆无宕机维护
◆副本集对应用程序是透明
复制的工作原理
◆复制至少需要两个节点A、B...
◆A是主节点,负责处理客户端请求
◆其余的都是从节点,负责复制主节点上的数据
◆节点常见的搭配方式为:一主一从、一主多从
◆主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致
◆主节点与从节点进行数据交互保障数据的一致性
复制的特点
◆N 个节点的集群
◆任何节点可作为主节点
◆所有写入操作都在主节点上
◆自动故障转移
◆自动恢复
实例操作:设置复制节点
step1:创建数据库目录t1、t2
在Desktop目录下演示,其它目录也可以,注意权限即可
mkdir t1
mkdir t2
step2:使用如下格式启动mongod,注意replSet的名称是一致的
mongod --bind_ip 192.168.10.110 --port 27018 --dbpath ~/Desktop/t1 --replSet rs0
mongod --bind_ip 192.168.10.111 --port 27019 --dbpath ~/Desktop/t2 --replSet rs0
step3:连接主服务器,此处设置192.168.10.110:27018为主服务器
mongo --host 192.168.10.110 --port 27018
step4:初始化
rs.initiate()
step5:查看当前状态
rs.status()
step6:添加复本集
rs.add('192.168.10.111:27019')
step8:新开窗口,连接第二个mongo服务
mongo --host 192.168.10.111 --port 27019
step9:向主服务器中插入数据
use test1
for(i=0;i<10;i++){db.t1.insert({_id:i})}
db.t1.find()
step10:在从服务器中插查询
如果在从服务器上进行读操作,需要设置rs.slaveOk()
rs.slaveOk()
db.t1.find()
其它说明
删除从节点
rs.remove('192.168.10.111:27019')
关闭主服务器后,再重新启动,会发现原来的从服务器变为了主服务器,新启动的服务器(原来的主服务器)变为了从服务器
熟练掌握MongoDB数据库也是Python工作者必须会的技能之一,对于大
量数据的分析和提取,放入NoSQL数据库是很好的选择,MongoDB就是
其中之一