• 当前位置: 首 页 > 教育百科 > 其他 > 正文

    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 一个 基于 分布式
    有价值
    0
    无价值
    0
    猜您喜欢
    最热文章

    暂不支持手机端,请登录电脑端访问

    正在加载验证码......

    请先完成验证