NoSQL数据库——MongoDB

MongoDB简介和启动

NoSQL数据库

NoSQL数据库:Not only sql,指代非关系型数据库

优点:高可扩展性、分布式计算、低成本、灵活架构、半结构化数据、简化关联关系

缺点:没有标准化、有限查询、不直观

windows下启动MongoDB
安装路径的bin目录下启动命令行
# 命令行输入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
启动成功后不要关闭这个窗口,打开另一个窗口输入mongo命令

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就是
     其中之一

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容