MongoDB 安装及文档的基本操作

:2020年06月02日 本站(微博
分享到:

MongoDB 是一个基于分布式文件存储的半结构化的非关系型数据库。在海量数据中,可以较高性能的处理存取操作。它是以 BSON 格式进行数据存储(类似 JSON 格式,但类型更为丰富),因此对于复杂的数据类型...

前言

MongoDB 是一个基于分布式文件存储的半结构化的非关系型数据库。在海量数据中,可以较高性能的处理存取操作。它是以 BSON 格式进行数据存储(类似 JSON 格式,但类型更为丰富),因此对于复杂的数据类型,可以较轻松的保存和处理。同时,在非关系型数据库阵容中,相比其他数据库产品,它拥有更丰富的功能,并且与关系型数据库类型,所以对于新手使用也能快速上手。

安装

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

安装包

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

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

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

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

  1. >

  2. tar

  3. -

  4. zxvf mongodb

  5. -

  6. linux

  7. -

  8. x86_64

  9. -

  10. enterprise

  11. -

  12. rhel70

  13. -

  14. 4.2

  15. .

  16. 6.tgz

配置文件

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

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

  1. >

  2. mkdir

  3. -

  4. p

  5. /

  6. var

  7. /

  8. mongodb

  9. /

  10. data

  11. >

  12. mkdir

  13. -

  14. p

  15. /

  16. var

  17. /

  18. mongodb

  19. /

  20. log

  21. >

  22. mkdir

  23. -

  24. p

  25. /

  26. var

  27. /

  28. mongodb

  29. /

  30. run

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

  1. # mongod.conf

  2. # for documentation of all options, see:

  3. #   http://docs.mongodb.org/manual/reference/configuration-options/

  4. # where to write logging data.

  5. systemLog

  6. :

  7. destination

  8. :

  9. file

  10. logAppend

  11. :

  12. true

  13. path

  14. :

  15. /var/

  16. mongodb

  17. /

  18. log

  19. /

  20. mongo

  21. .

  22. log

  23. # 日志文件路径设置

  24. # Where and how to store data.

  25. storage

  26. :

  27. dbPath

  28. :

  29. /var/

  30. mongodb

  31. /

  32. data

  33. # 数据存储路径

  34. journal

  35. :

  36. enabled

  37. :

  38. true

  39. #  engine:

  40. #  wiredTiger:

  41. # how the process runs

  42. processManagement

  43. :

  44. fork

  45. :

  46. true

  47. # fork and run in background

  48. pidFilePath

  49. :

  50. /var/

  51. mongodb

  52. /

  53. run

  54. /

  55. mongod

  56. .

  57. pid

  58. # location of pidfile

  59. timeZoneInfo

  60. :

  61. /usr/

  62. share

  63. /

  64. zoneinfo

  65. # network interfaces

  66. net

  67. :

  68. port

  69. :

  70. 27017

  71. # 端口号

  72. bindIp

  73. :

  74. 127.0

  75. .

  76. 0.1

  77. # 监听 IP ,即可访问 IP,默认是本机

  78. security

  79. :

  80. authorization

  81. :

  82. enabled

  83. #operationProfiling:

  84. #replication:

  85. #sharding:

  86. ## Enterprise-Only Options

  87. #auditLog:

  88. #snmp:

配置文件常用基本属性:

属性说明systemLog#destination日志输出位置,file 或 syslog,使用 file 时,必须指定 pathsystemLog#logAppend当实例启动时日志是否追加写入到现有日志中

systemLog#path日志存放路径storage#dbPath数据存储路径storage#journal#enabled日志是否永久性,可以用来恢复数据processManagement#fork是否后台运行服务processManagement#pidFilePathpid 文件的存储路径processManagement#timeZoneInfo数据库使用的时区路径net#port数据使用的端口net#bindIp监听客户端连接的 IP,即可访问的 IPsecurity#authorization是否启动权限管控

服务启停

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

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

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

  1. >

  2. mongod

  3. -

  4. f

  5. /

  6. var

  7. /

  8. mongodb

  9. /

  10. mongodb

  11. .

  12. conf

如图所示,则启动成功

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

  1. >

  2. mongo

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

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

  1. >

  2. use admin

  3. >

  4. db

  5. .

  6. createUser

  7. ({

  8. user

  9. :

  10. "xxxx"

  11. ,

  12. pwd

  13. :

  14. "xxxxxx"

  15. ,

  16. roles

  17. :[

  18. "root"

  19. ]})

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

  1. >

  2. mongo

  3. -

  4. u accont

  5. -

  6. p password

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

  1. >

  2. use admin

  3. >

  4. db

  5. .

  6. shutdownServer

  7. ()

基本操作

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

MongoDB关系型数据库Database(数据库)Database(数据库)

Collection(集合)Table(表)Document(文档)Row(行)Field(字段)Column(列)

Database 的操作

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

查看所有数据库

  1. >

  2. show dbs

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

  1. >

  2. use db

  3. >

  4. db

  5. .

  6. dropDatabase

  7. ()

Collection 的操作

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

  1. >

  2. db

  3. .

  4. createCollection

  5. (

  6. collectionName

  7. ,

  8. [

  9. options

  10. ])

其中 options为可选参数,主要是数据的校验规则,这里不展开分析。

查看数据库中所有集合

  1. >

  2. show collections

选择集合

  1. >

  2. db

  3. .

  4. getCollection

  5. (

  6. collectionName

  7. )

  8. >

  9. db

  10. .

  11. collectionName

删除集合

  1. >

  2. db

  3. .

  4. collectionName

  5. .

  6. drop

  7. ()

插入

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

insertOne

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

  1. db

  2. .

  3. collect

  4. .

  5. insertOne

  6. (

  7. <

  8. document

  9. >,

  10. {

  11. writeConcern

  12. :

  13. <

  14. document

  15. >

  16. }

  17. )

指令 insertOne() 中参数:

  • document 参数为 插入的 BSON 数据

  • writeConcern 为写入策略,是可选参数

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

  1. db

  2. .

  3. article

  4. .

  5. insertOne

  6. (

  7. {

  8. title

  9. :

  10. "Dubbo 负载均衡的实现"

  11. ,

  12. url

  13. :

  14. "https://ytao.top/2020/05/02/23-dubbo-loadbalance/"

  15. ,

  16. author

  17. :

  18. "ytao"

  19. }

  20. )

数据库数据为:

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

insertMany

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

  1. db

  2. .

  3. collect

  4. .

  5. insertMany

  6. (

  7. [<

  8. document

  9. 1

  10. >,

  11. <

  12. document

  13. 2

  14. >],

  15. {

  16. writeConcern

  17. :

  18. <

  19. document

  20. >,

  21. ordered

  22. :

  23. <

  24. boolean

  25. >

  26. }

  27. )

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

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

  1. db

  2. .

  3. article

  4. .

  5. insertMany

  6. (

  7. [

  8. {

  9. title

  10. :

  11. "Netty中粘包/拆包处理"

  12. ,

  13. url

  14. :

  15. "https://ytao.top/2019/12/09/10-netty/"

  16. ,

  17. author

  18. :

  19. "ytao"

  20. },

  21. {

  22. title

  23. :

  24. "WebSocket实现Web端即时通信"

  25. ,

  26. url

  27. :

  28. "https://ytao.top/2019/11/17/7_websocket/"

  29. ,

  30. author

  31. :

  32. "ytao"

  33. }

  34. ]

  35. )

插入后的数据

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

insert

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

  1. db

  2. .

  3. collect

  4. .

  5. insert

  6. (

  7. <

  8. document

  9. >

  10. or

  11. [<

  12. document

  13. 1

  14. >,

  15. <

  16. document

  17. 2

  18. >],

  19. {

  20. writeConcern

  21. :

  22. <

  23. document

  24. >,

  25. ordered

  26. :

  27. <

  28. boolean

  29. >

  30. }

  31. )

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

save

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

  1. db

  2. .

  3. collect

  4. .

  5. save

  6. (

  7. <

  8. document

  9. >,

  10. {

  11. writeConcern

  12. :

  13. <

  14. document

  15. >

  16. }

  17. )

更新

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

update

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

  1. db

  2. .

  3. collection

  4. .

  5. update

  6. (

  7. <

  8. query

  9. >,

  10. <

  11. update

  12. >,

  13. {

  14. upsert

  15. :

  16. <

  17. boolean

  18. >,

  19. multi

  20. :

  21. <

  22. boolean

  23. >,

  24. writeConcern

  25. <

  26. document

  27. >,

  28. collation

  29. :

  30. <

  31. document

  32. >,

  33. arrayFilters

  34. :

  35. [<

  36. filter1

  37. >,<

  38. filter2

  39. >]

  40. }

  41. )

update 的参数:

  • query:要更新文档的查询条件

  • update:要更新的字段

  • upsert:默认为 false。当设置 true 时,如果更新的条件没有匹配到数据时,则插入此更新条件。反之,设为 false 时,则不插入。

  • multi:默认为 false。当查询条件匹配到多条数据时,如果设置为 true,则会更新所有匹配的数据;如果设置为 false,则更新匹配出的第一条数据。

  • writeConcern:和上面 insert 的参数一样。

  • collation:更新数据的排序规则。

  • arrayFilters:更新数据中数组格式数据的某个特定元素。

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

更新前数据:

  1. {

  2. "_id"

  3. :

  4. ObjectId

  5. (

  6. "5ed299cee89845fb9ec805e4"

  7. ),

  8. "title"

  9. :

  10. "WebSocket实现Web端即时通信"

  11. ,

  12. "url"

  13. :

  14. "https://ytao.top/2019/11/17/7_websocket/"

  15. ,

  16. "author"

  17. :

  18. "ytao"

  19. }

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

  1. db

  2. .

  3. article

  4. .

  5. update

  6. (

  7. {

  8. title

  9. :

  10. "WebSocket实现Web端即时通信"

  11. },

  12. {

  13. $set

  14. :

  15. {

  16. author

  17. :

  18. [

  19. "杨滔"

  20. ,

  21. "ytao"

  22. ]}}

  23. )

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

  1. db

  2. .

  3. article

  4. .

  5. update

  6. (

  7. {

  8. title

  9. :

  10. "WebSocket实现Web端即时通信"

  11. },

  12. {

  13. $set

  14. :

  15. {

  16. "author.$[idx]"

  17. :

  18. "YangTao"

  19. }},

  20. {

  21. arrayFilters

  22. :[

  23. {

  24. "idx"

  25. :

  26. {

  27. $eq

  28. :

  29. "杨滔"

  30. }}

  31. ]

  32. }

  33. )

上面 idx表示数组中元素的位置。

更新后的数据

updateOne

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

语法:

  1. db

  2. .

  3. collection

  4. .

  5. updateOne

  6. (

  7. <

  8. filter

  9. >,

  10. <

  11. update

  12. >,

  13. {

  14. upsert

  15. :

  16. <

  17. boolean

  18. >,

  19. writeConcern

  20. :

  21. <

  22. document

  23. >,

  24. collation

  25. :

  26. <

  27. document

  28. >,

  29. arrayFilters

  30. :

  31. [

  32. <

  33. filterdocument1

  34. >,

  35. ...

  36. ],

  37. hint

  38. :

  39. <

  40. document

  41. |

  42. string

  43. >

  44. }

  45. )

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

updateMany

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

语法:

  1. db

  2. .

  3. collection

  4. .

  5. updateMany

  6. (

  7. <

  8. filter

  9. >,

  10. <

  11. update

  12. >,

  13. {

  14. upsert

  15. :

  16. <

  17. boolean

  18. >,

  19. writeConcern

  20. :

  21. <

  22. document

  23. >,

  24. collation

  25. :

  26. <

  27. document

  28. >,

  29. arrayFilters

  30. :

  31. [

  32. <

  33. filterdocument1

  34. >,

  35. ...

  36. ],

  37. hint

  38. :

  39. <

  40. document

  41. |

  42. string

  43. >

  44. }

  45. )

replaceOne

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

语法:

  1. db

  2. .

  3. collection

  4. .

  5. replaceOne

  6. (

  7. <

  8. filter

  9. >,

  10. <

  11. replacement

  12. >,

  13. {

  14. upsert

  15. :

  16. <

  17. boolean

  18. >,

  19. writeConcern

  20. :

  21. <

  22. document

  23. >,

  24. collation

  25. :

  26. <

  27. document

  28. >,

  29. hint

  30. :

  31. <

  32. document

  33. |

  34. string

  35. >

  36. }

  37. )

save

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

删除

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

deleteOne

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

  1. db

  2. .

  3. collection

  4. .

  5. deleteOne

  6. (

  7. <

  8. filter

  9. >,

  10. {

  11. writeConcern

  12. :

  13. <

  14. document

  15. >,

  16. collation

  17. :

  18. <

  19. document

  20. >

  21. }

  22. )

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

deleteMany

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

  1. db

  2. .

  3. collection

  4. .

  5. deleteMany

  6. (

  7. <

  8. filter

  9. >,

  10. {

  11. writeConcern

  12. :

  13. <

  14. document

  15. >,

  16. collation

  17. :

  18. <

  19. document

  20. >

  21. }

  22. )

remove

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

  1. db

  2. .

  3. collection

  4. .

  5. remove

  6. (

  7. <

  8. query

  9. >,

  10. <

  11. justOne

  12. >

  13. )

或者

  1. db

  2. .

  3. collection

  4. .

  5. remove

  6. (

  7. <

  8. query

  9. >,

  10. {

  11. justOne

  12. :

  13. <

  14. boolean

  15. >,

  16. writeConcern

  17. :

  18. <

  19. document

  20. >,

  21. collation

  22. :

  23. <

  24. document

  25. >

  26. }

  27. )

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

查询

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

findOne

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

  1. db

  2. .

  3. collection

  4. .

  5. findOne

  6. (

  7. <

  8. query

  9. >,

  10. <

  11. projection

  12. >

  13. )

参数说明:

  • query 表示查询条件。

  • projection 表示返回的字段(Field)。

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

通过指定字段的 value 为 1,即表示查询后返回的字段。

find

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

  1. db

  2. .

  3. collection

  4. .

  5. find

  6. (

  7. <

  8. query

  9. >,

  10. <

  11. projection

  12. >

  13. )

下面案例查询查询结果:

总结

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

更多使用操作,官方文档:https://docs.mongodb.com/manual/reference/

文/  王振袢
关键词: 前言 MongoDB 一个 基于 分布式

来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

您在阅读:MongoDB 安装及文档的基本操作

Copyright©2013-2020 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利

苏公网安备32010402000125苏ICP备14051488号-3南京思必达教育科技有限公司版权所有

技术支持:南京博盛蓝睿网络科技有限公司  

最热文章
最新文章
  • 卡尔蔡司镜片优惠店,镜片价格低
  • 苹果原装手机壳