设为首页 收藏本站
查看: 1247|回复: 0

[经验分享] NoSQL数据库一MongoDB基本使用

[复制链接]

尚未签到

发表于 2018-10-24 13:50:50 | 显示全部楼层 |阅读模式
  如今的网站对数据存储要求越来越灵活,在这种需求下 NoSQL 也就是非关系数据库越来越流行。所谓非关系数据库,是指不使用 SQL 语言进行数据操作的数据库的统称。这类数据库存储数据时没有固定的模式,不支持数据表 join 的操作,可以很方便的进行横向扩展。非关系数据库种类很多,其中 MongoDB 和 Redis 应用广泛。

一、MongoDB介绍
  MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

二、安装MongoDB
  MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。
  打开终端,输入以下命令:
  sudo apt-get install mongodb
  安装完成后,在终端输入以下命令查看MongoDB版本:
  mongo -version
  输出版本信息,表明安装成功
  启动和关闭mongodb命令如下:
  

service mongodb start  
service mongodb stop
  

  默认设置MongoDB是随Ubuntu启动自动启动的。
  输入以下命令查看是否启动成功:
  pgrep mongo -l   #注意:-l是英文字母l,不是阿拉伯数字1
  卸载MongoDB
  sudo apt-get --purge remove mongodb mongodb-clients mongodb-server

三、使用MongoDB
  shell命令模式
  输入mongo进入shell命令模式,默认连接的数据库是test数据库,在此之前一定要确保你已经启动了MongoDB,否则会出现错误,启动之后运行成功,如下截图:
DSC0000.jpg

  MongoDB 存储的文档记录是一个 BSON 对象,类似于 JSON 对象,由键值对组成。比如一条用户记录:
  

{  name: "Aiden",
  age: 30,
  email: "luojin@simplecloud.cn"
  
}
  


  每一个文档都有一个>  常用操作命令:
  数据库相关


  • show dbs:显示数据库列表
  • show collections:显示当前数据库中的集合(类似关系数据库中的表table)
  • show users:显示所有用户
  • use yourDB:切换当前数据库至yourDB
  • db.help() :显示数据库操作命令
  • db.yourCollection.help() :显示集合操作命令,yourCollection是集合名
  先尝试往 MongoDB 中插入一条数据:
  

$ mongo  
> use shiyanlou
  
> db.user.insertOne({name: "Aiden", age: 30, email: "luojin@simplecloud.cn", addr: ["CD", "SH"]})
  
{
  "acknowledged" : true,
  "insertedId" : ObjectId("59a8034064e0acb13483d512")
  
}
  
> show databases;
  
admin      0.000GB
  
local      0.000GB
  
shiyanlou  0.000GB
  
> show collections;
  
user
  


  可以看到,在插入数据前使用 use 指令,切换到了 shiyanlou 数据库,尽管该数据库暂时不存在,但当我们插入数据后,该数据库就被自动创建了。show databases 和 show collection 分别显示了当前存在的数据库和当前数据库的所有文档集合。而且数据插入后,自动添加了>  

> db.user.insertMany([  
... {name: "lxttx", age: 28, email: "lxttx@simplecloud.cn", addr: ["BJ", "CD"]},
  
... {name: "jin", age: 31, email: "jin@simplecloud.cn", addr: ["GZ", "SZ"]},
  
... {name: "nan", age: 26, email: "nan@simplecloud.cn", addr: ["NJ", "AH"]}
  
... ])
  
{
  "acknowledged" : true,
  "insertedIds" : [
  ObjectId("59a8034564e0acb13483d513"),
  ObjectId("59a8034564e0acb13483d514"),
  ObjectId("59a8034564e0acb13483d515")
  ]
  
}
  

  添加的数据其结构是松散的,只要是bson格式均可,列属性均不固定,根据添加的数据为准。先定义数据再插入,就可以一次性插入多条数据,运行完以上例子,库自动创建,这也说明 MongoDB 不需要预先定义 collection ,在第一次插入数据后,collection 会自动的创建。
  查询数据可以使用 db.collection.find 方法,可以指定查询过滤条件:
  

> db.user.find()  
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 30, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH" ] }
  
{ "_id" : ObjectId("59a8034564e0acb13483d513"), "name" : "lxttx", "age" : 28, "email" : "lxttx@simplecloud.cn", "addr" : [ "BJ", "CD" ] }
  
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
  
{ "_id" : ObjectId("59a8034564e0acb13483d515"), "name" : "nan", "age" : 26, "email" : "nan@simplecloud.cn", "addr" : [ "NJ", "AH" ] }
  

  
> db.user.find({name: "jin"})
  
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
  

  
> db.user.find({age: {$gt: 30}})
  
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
  

  
> db.user.find({addr: "CD"})
  
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 30, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH" ] }
  
{ "_id" : ObjectId("59a8034564e0acb13483d513"), "name" : "lxttx", "age" : 28, "email" : "lxttx@simplecloud.cn", "addr" : [ "BJ", "CD" ] }
  

  上面例子中,我们先通过 db.user.find() 获取到了之前插入的全部数据。接着使用不同的过滤条件进行了查询,其中有一些查询如 {age: {$gt: 30}} 表示查询年龄大于 30 的用户。还可以发现查询数组中是否存在某一元素也非常方便,上面的例子中查询出了所有地址含有 CD 用户。
  MongoDB 的查询功能非常强大,可以组合各种查询条件,更多的使用方法可以学习实验楼的其他课程。更新数据主要通过 db.user.updateOne 或者 db.user.updateMany 方法,前者更新一条记录,后者更新多条记录:
  

> db.user.updateOne(  
... {name: "Aiden"},
  
... {$set: {age: 29, addr: ["CD", "SH", "BJ"]}}
  
... )
  
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
  
> db.user.find({name: "Aiden"})
  
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 29, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH", "BJ" ] }
  

  可以看到成功的更新了一条记录。删除数据也非常简单,可以通过 db.user.deleteMany 或db.user.deleteOne 方法:
  

> db.user.deleteMany({addr: "CD"})  
{ "acknowledged" : true, "deletedCount" : 2 }
  
> db.user.find()
  
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "user" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
  
{ "_id" : ObjectId("59a8034564e0acb13483d515"), "user" : "nan", "age" : 26, "email" : "nan@simplecloud.cn", "addr" : [ "NJ", "AH" ] }
  

  上面的命令成功的删除所有地址包含 "CD" 的用户,共删除了两条记录。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626003-1-1.html 上篇帖子: 3分钟掌握MongoDB中的regex几种用法 下篇帖子: centos 6.8 部署mongodb3.6.2主从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表