centos7安装mongodb_MongoDB 安装及文档的基本操作

99b0dbe7582327fae1a1ff1d8752f991.png

本文转载于SegmentFault社区

作者:tao


前言

MongoDB是一个基于分布式文件存储的半结构化的非关系型数据库。在海量数据中,可以使用更高性能的处理访问操作。它采用BSON格式进行数据存储(类似JSON格式,但类型更为常规)同时,在非关系型数据库平台中,各种其他数据库产品,它拥有更丰富的功能,并且与关系型数据库类型,所以对于新手使用也能快速上手。

安装


环境:CentOS 7
版本号:4.2.6企业版
版本:免安版(TGZ)

安装包


访问官网链接下载链接:https://www.mongodb.com/downloadcenter/enterprise

我这里使用的是企业版,下载选项如下:

a18f2fa9afdc6290f9d8dbb0b7c0a4c2.png

下载后得到压缩包mongodb-linux-x86_64-enterprise-rhel70-4.2.6.tgz

将下载的压缩包上传至对应目录,然后进行解压

> tar -zxvf mongodb-linux-x86_64-enterprise-rhel70-4.2.6.tgz

配置文件


当前使用的是免安版,所以mongoDB的配置文件需要自己手动创建。如果使用的是安装版,安装后配置文件会在/etc/mongod.conf中。

创建配置前,先创建数据,日志,运行三个目录,分别对应的数据存储目录,日志目录,进程ID保存目录

> mkdir -p /var/mongodb/data> mkdir -p /var/mongodb/log> mkdir -p /var/mongodb/run

在/ var / mongodb目录中,创建内容mongod.conf,内容如下:

# mongod.conf# for documentation of all options, see:# http://docs.mongodb.org/manual/reference/configuration-options/# where to write logging data.systemLog: destination: file logAppend: true path: /var/mongodb/log/mongo.log # 日志文件路径设置# Where and how to store data.storage: dbPath: /var/mongodb/data # 数据存储路径 journal: enabled: true# engine:# wiredTiger:# how the process runsprocessManagement: fork: true # fork and run in background pidFilePath: /var/mongodb/run/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo# network interfacesnet: port: 27017 # 端口号 bindIp: 127.0.0.1 # 监听 IP ,即可访问 IP,默认是本机security: authorization: enabled#operationProfiling:#replication:#sharding:## Enterprise-Only Options#auditLog:#snmp:

配置文件常用基本属性:

2337897e944e884fc94209145e906b7b.png

9eafb5252b68dadff545763d650f04e5.png

服务启停


将解压后的安装包bin路径添加到环境变量/ etc / profile中,在PATH上进行追加

# mongoDBPATH=$PATH:/usr/local/software/mongoDB/mongodb-linux-x86_64-enterprise-rhel70-4.2.6/bin

使用/var/mongodb/mongod.conf配置文件启动:

> mongod -f /var/mongodb/mongodb.conf

如所示,则启动成功

9ac46c6d983bdd74d0e5fd4d048a00e3.png

启动完成后,验证是否正常运行

> mongo

如果正常运行,则进入登录页面

bb0c97fda25a2bc1f739ac167a970a0a.png

创建账号,并设置角色为root

> use admin> db.createUser({user:"xxxx",pwd:"xxxxxx",roles:["root"]})

设置账号后,重新登录,此时需要进行账号权限校验

> mongo -u accont -p password

停止MongoDB服务,必须切换到admin数据库

> use admin> db.shutdownServer()

基本操作


在介绍几本操作之前,现将常用的MongoDB对象与关系型数据库进行类比,以便更好地理解MongoDB对象。

a8bf21943b76023236919c892a136163.png

数据库的操作


数据创建和选择,都是使用use db命令

查看所有数据库

> show dbs

删除数据库,先选择再删除

> use db> db.dropDatabase()

集合的操作


创建集合命令,同时,如果没有先创建集合,插入数据时会自动创建集合

> db.createCollection(collectionName, [options])

其中options为任选参数,主要是数据的校验规则,此处不展开分析。

查看数据库中所有集合

> show collections

选择集合

> db.getCollection(collectionName)> db.collectionName

删除集合

> db.collectionName.drop()

插入


MongoDB插入方法有insertOne(),insertMany(),insert(),save()。其中insert()功能就包括了insertOne()和insertMany()功能。

insertOne

insertOne()是向数据库中插入一个文档,语法格式为:

db.collect.insertOne( , { writeConcern: })

指令insertOne()中参数:

  • document参数为插入的BSON数据
  • writeConcern为写入策略,是可选参数

向MongoDB的ytao数据库中,插入一条文章集合的数据

db.article.insertOne( { title: "Dubbo 负载均衡的实现", url: "https://ytao.top/2020/05/02/23-dubbo-loadbalance/", author: "ytao" })

数据库数据为:

7948b0a20d0adc5688d0de2fe739da65.png

注意:如果插入数据时,没指定_id,则重新自动生成_id;如果指定_id,则必须_id在数据库中存在,否则会报错插入失败。

insertMany

insertMany()方法是一次插入多个文档,语法格式为:

db.collect.insertMany( [, ], { writeConcern: , ordered: })

参数ordered为是否有序插入文档,可选参数,可选true。

向MongoDB的ytao数据库中,插入了两条文章集合的数据

db.article.insertMany( [ { title: "Netty中粘包/拆包处理", url: "https://ytao.top/2019/12/09/10-netty/", author: "ytao" }, { title: "WebSocket实现Web端即时通信", url: "https://ytao.top/2019/11/17/7_websocket/", author: "ytao" }])

插入后的数据

05ec709688d0a83789d90babbbeafac4.png

同理,与insertOne()相同,插入重复插入已存在的_id,否则报错。

insert()可以插入片段或多个文档,这个也是最常见的方法,其语法为

db.collect.insert( or [, ], { writeConcern: , ordered: })

插入的文档如果是碎片,则类似insertOne()的插入方式;如果插入的文档是多个,则类似insertMany()的插入方式。其中,参数writeConcern和ordered都是一样。

save()也可以进行数据插入,当新插入的_id存在时,转换已存在的文档进行覆盖,如果_id不存在时,则类似insertOne()的方式插入。其操作语法:

db.collect.save( , { writeConcern: })

更新


进行更新的方法有updateOne(),updateMany(),update(),replaceOne()以及save()。其中,update()包括updateOne()和updateMany()的功能。

更新

通过update()可以更新一个或多个文档,其语法:

db.collection.update( , , { upsert: , multi: , writeConcern , collation: , arrayFilters: [,] })

更新的参数:

  • 查询:要更新文档的查询条件
  • update:要更新的长度
  • upsert:默认为false。当设置为时,如果更新的条件没有匹配到数据时,则插入此更新条件。反之,创建false时,则不插入。
  • 当查询条件匹配到多条数据时,如果设置为true,则更新所有匹配的数据;如果设置为false,则更新匹配出的第一条数据。
  • writeConcern:和上面insert的参数一样。
  • 排序规则:更新数据的排序规则。
  • arrayFilters:更新数据中数组格式数据的某个特定元素。

接下来就演示两个例子,一个普通更新,一个带使用arrayFilters数据的更新,这个比较难说明,但通过示例就容易理解。

更新前数据:

{ "_id" : ObjectId("5ed299cee89845fb9ec805e4"), "title" : "WebSocket实现Web端即时通信", "url" : "https://ytao.top/2019/11/17/7_websocket/", "author" : "ytao"}

案例一将author数据更新为["杨滔", "ytao"]

db.article.update( {title: "WebSocket实现Web端即时通信"}, {$set: {author: ["杨滔", "ytao"]}})

案例二将author数据["杨滔", "ytao"]的杨滔更新为YangTao

db.article.update( {title: "WebSocket实现Web端即时通信"}, {$set: {"author.$[idx]": "YangTao"}}, { arrayFilters:[ {"idx": {$eq: "杨滔"}} ] })

上面idx表示副本中元素的位置。

更新后的数据

0d90636cb575a66d2250793228f40feb.png

updateOne

updateOne()只能更新一个文档,和update()使用类似,将multi参数更改为false一样,这里不再使用案例演示。

语法:

db.collection.updateOne( , , { upsert: , writeConcern: , collation: , arrayFilters: [ , ... ], hint: })

hint是4.2.1版本中添加的参数,用于指定更新文档的索引。

updateMany

updateMany()同样和update()更新多个文档使用一样。

语法:

db.collection.updateMany( , , { upsert: , writeConcern: , collation: , arrayFilters: [ , ... ], hint: })

replaceOne

replaceOne将一个文档完全覆盖,并且不需要指定_id。只能覆盖一个文档。

语法:

db.collection.replaceOne( , , { upsert: , writeConcern: , collation: , hint: })

save()在更新中是指定_id的方式进行文档覆盖。即上文插入中的save()用法。

删除


删除文档的方法有deleteOne(),deleteMany(),remove()

deleteOne

deleteOne()一次只能删除一个文档,其语法:

db.collection.deleteOne( , { writeConcern: , collation: })

filter为删除文档的过滤条件。

deleteMany

deleteMany()一次可删除多个匹配到的文档,其语法:

db.collection.deleteMany( , { writeConcern: , collation: })

去掉

remove()是删除查询出的文档,其语法有两个:

db.collection.remove( , )

或者

db.collection.remove( , { justOne: , writeConcern: , collation: })

justOne参数类型为false,表示删除全部匹配到的数据;true表示只删除第一个文档

查询


MongoDB中常用的基本查询有findOne()和find()。

找一个

findOne()只返回匹配到的第一个文档,语法为:

db.collection.findOne( , )

参数说明:

  • query表示查询条件。
  • projection表示返回的变量(Field)。

下面查询一个文档,title和只返回和url

cb333e3a99dd37ed01edee0b99f7e3aa.png

通过指定细分的值为1,即表示查询后返回的细分。

find()是返回所有匹配到的集合,语法为:

db.collection.find( , )

以下案例查询查询结果:

cfd490945334cc6213623ac245dec74b.png

总结


本文对MongoDB的入门和基本操作进行了简单的了解,在这使用过程中,有点类似关系型数据库操作的影子,所以对有关系型数据库使用经验的人,上手是多个简单的。

更多使用操作,官方文档:

https : //docs.mongodb.com/manual/reference/

推荐阅读

ElasticSearch之安装及基本操作API:

https://ytao.top/2019/12/14/11-elasticsearch/

Redis5新特性Streams作消息体内:

https://ytao.top/2020/01/06/14-redis-streams/

基于Docker实现MySQL主从复制:

https://ytao.top/2019/10/27/4_%E5%9F%BA%E4%BA%8EDocker%E5%AE%9E%E7%8E%B0MySQL%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/

Java线程通信之wait / notify机制:

https://ytao.top/2020/05/12/24-thread-wait-notify/


- END -

39ddfa3643d971b88a7e4e702f313a0b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值