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

[经验分享] MongoDb的基本操作快速入门

[复制链接]

尚未签到

发表于 2018-10-25 08:33:50 | 显示全部楼层 |阅读模式
  1.MongoDb简介
  mongodb是一个基于分布式存储的开源数据库系统又被称为文档数据库,可以将数据存储为一个文档,数据结构有键值对(key=>value)对组成,存储的文档类似于JSON对象(BSON->JSON的二进制化)。
  特点:内部执行引擎为JS解释器,把文档存储成BSON结构,在查询时,转换为JS对象,并可以通过熟悉的JS语法来操作。
  mongodb和传统数据库简单比较,最大的不同:
  传统型数据库:结构化数据,定好了表结构后,每一行的内容,必定是符合表结构的,就是说列的个数以及类型都一样。
  文档数据库:表下的每篇文档都可以有自己独特的结构或者属性和值。
  2.MongoDb的安装(centos7下详细安装步骤)
  1)首先下载mongodb安装包:
#wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.4.tgz  2)进入到下载的目录,将mongodb的安装包解压到指定的目录中:
#tar -xvf mongodb-linux-x86_64-rhel70-3.4.4.tgz -C /usr/local  3)进入解压到的目录,来启动mongodb服务
#cd /usr/local  重命名MongoDb解压的目录
#mv mongodb-linux-x86_64-rhel70-3.4.4 mongodb  
#cd mongodb
  4)启动MongoDb
#mkdir -p /home/mongodata/ /var/log/mongolog/  
#./bin/mongod --dbpath /home/mongodata/ --logpath /var/log/mongolog/mongo.log --fork --port 27017
  启动参数说明:
  --dbpath 数据存储目录
  --logpath 日志存储目录
  --port 运行端口
  --fork 后台运行
  5)通过客户端连接到MongoDb
#./bin/mongo  注意:在一些老的版本中MongoDb启动的时候会事先占用很多磁盘空间,启动后可能需要占3-4G空间,如果虚拟机的空间过小将不能启动,但是它有一个选项--smallfiles可以使启动时占用空间缩小至400M左右。
  3.mongodb具体操作示例
  一 、mongodb的入门操作:
  1)查询所有库列表
>show dbs;  2)切换数据库(选择使用的数据库)
>use local;  3)创建数据库
  (注意:由于mongodb数据库是隐式创建没有直接的创建数据库的方法,但可以直接使用use切换到一个事先不存在的库下边,当创建表(collections)的时候会自动创建当前数据库)
>use shop  (假设shop库不存在,也可以直接使用use)
>db.createCollection('user');  (可以在一个不存在的库下边直接创建collections(或者可以说创建表))
>show dbs;  然后你再去查看库的时候会发现库shop已经默认创建出来了。
  4)创建一个表(collections)
>db.createCollection('user')  注意:表(也就是collections)也可以是隐式创建的,还拿上边的例子说:假如shop库里边不存在一个goods的表(collections),我们仍然可以使用下边的方式插入数据
>db.goods.insert({_id:1,name:'pipixia',price:52.10});  然后我们去查看shop这个库内的表(collections)时,发现goods已经被自动创建出来了。
  5)向collections(表)中插入单篇文档(数据)(插入的数据为json格式)
>db.user.insert({name:'张三',age:18})  6)查找collections(表)中的内容
>db.user.find()  7)删除collections(表)()
>db.user.drop()  8)删除数据库(databases)
>db.dropDatabase()  二、mongodb的基本操作(增、删、改、查)CURD
  1.增操作:insert
  注意:mongodb存储的是文档,而所谓的文档在这里其实是json格式的对象
  1)增加单篇文档
>db.collectionName.insert({sn:'001',name:'xiaoming'})  2)增加单篇文档,并指定id
>db.collectionName.insert({_id:2,sn:'002',name:'xiaohong'})  3)增加多篇文档(因为json是一个对象,js里边有数组的概念,只需把多个对象放到数组里即可)
>db.collectionName.insert([{sn:'003','name':'zhangfei'},{sn:'004','name':'guanyu'},{sn:'004','name':'liubei'}])  2.删操作:remove
  语法:db.collectionName.remove(查询表达式,选项)
  选项是指{justOne:true/false},是否删一行,默认是false
  注意:
  1.查询表达式依然是一个json对象
  2.查询表达式匹配到的行将被删除
  3.如果没有查询表达式,则collections中的所有文档将全部被删除
  1)删除指定json文档(json格式的对象)
  例如:删除collectionName表中sn属性值为002的json对象文档
>db.collectionName.remove({sn:'002'})  2)假如查询表达式为空,如下
>db.collectionName.remove()  会删除库中的所有文档,使用要小心
  3)假如我们想删除符合查询表达式中的一行数据可以使用上边提到的《选项》功能,如
>db.collectionName.remove({"name":"zhangsan"},true)  则只会删除所有name符合zhangsan的其中一条文档数据
  3.改操作:update
  语法:db.collectionName.update(查询表达式,新值,选项)
  1)查询表达式是指需要修改谁,新值是指改成什么样,选项是指可选参数
  例如:
>db.collectionName.update({name:'zhangfei'},{name:'zhangfeifei'})  查看一下更改结果
  >db.collectionName.find()
  将会发现修改后的文档中就剩下id和name列了,而sn列不见了
  原因:新文档直接替换了旧的文档,而不是修改
  2)但是我们可以使用$set来指定修改某一列
>db.collectionName.update({name:'guanyu'},{$set:{name:'guanyunchang'}})  修改时的赋值表达式
  $set 修改某个列的值
  $unset 删除某个列
  $rename 重命名某个列
  $inc 增大某个列的值
  3)来一个复杂的更新操作
  先插入一条数据
>db.collectionName.insert({name:'caocao',age:40,sex:'m',addr:'wei')  修改这条数据
>db.collectionName.update({name:'caocao'},{$set:{name:'caoaman'},$unset:{addr:1},$rename:{sex:'gender'},$inc:{age:10}})  4)第三个可选参数option的作用:
  {upsert:true/false,multi:true/false}
  upsert是指没有匹配的行,则直接插入该行。(和mysql中的replace类似)
  例如:
>db.collectionName.update({_id:100},{name:'liubei'},{upsert:true})  如果没有_id为100的文档,则直接插入该文档。
  注意:如果既没有_id为100的文档,又没有upsert可选参数,则该跟新操作不会对表中的文档造成影响。
  multi是指要不要改多行
  即如果查询表达式匹配到多行默认情况下只会更改一行,如果要想修改多行,则需要使用此选项。
  例如:
>db.collectionName.update({sex:'m'},$set:{sex:'w'},{multi:true})  会把collectionName中所有sex=m的文档都修改为sex=w
  4.查操作:find,findOne
  语法:db.collection.find(查询表达式,查询的列)
  例如:
  1)查询所有文档
>db.collectionName.find()  2)查询所有文档的sex属性(列)
>db.collectionName.find({},{sex:1})  3)查询所有文档的sex属性,不查询_id属性
>db.collectionName.find({},{sex:1,_id:0})  注意:无论增删改查都离不开一个查询表达式,以上的示例都是比较简单的入门操作



运维网声明 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-626134-1-1.html 上篇帖子: mongodb分片部署说明 下篇帖子: MongoDB笔记(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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