51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

MongoDB 常用命令教程

我们介绍过 MongoDB 的概述和安装方法,本文记录 MongoDB 使用方法。

概要 {#概要}

之前介绍过 Python MOngoDB 命令,本文记录终端常用命令

  • MongoDB 终端使用常用命令分为
  1. 连接 MongoDB
  2. 数据库、 集合操作
  3. 数据增删改查

连接 MongoDB {#连接-MongoDB}

  • 默认情况下,MongoDB的启动端口为27017。比MongoDB启动端口大1000的端口为MongoDB的web用户界面,你可以在浏览器中输入 http://localhost:28017 来访问MongoDB的web用户界面。

  • 可以通过执行以下命令来连接MongoDB的服务。

    • mongodb:// 这是固定的格式,必须要指定。
    • username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库
    • host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
    • portX 可选的指定端口,如果不填,默认为27017
    • /database 如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库。
    • ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
  • 示例:

    连接本地数据库服务器,端口是默认的。

    使用用户名admin,密码123456登录localhost的admin数据库。

    使用用户名admin,密码123456登录localhost的w3cschool数据库。

查看 MongoDB 版本 {#查看-MongoDB-版本}

  • 使用命令:

用户操作 {#用户操作}

  1. 和用户管理相关的操作基本都要在admin数据库下运行,要先use admin;
  2. 如果在某个单一的数据库下,那只能对当前数据库的权限进行操作;
  3. db.addUser是老版本的操作,现在版本也还能继续使用,创建出来的user是带有root role的超级管理员。

启用权限验证 {#启用权限验证}

或者修改mongo.conf,最后一行添加 :

创建用户 {#创建用户}

  • 切换管理员用户
  • 权限设置:

    | 权限 | 描述 | |----------------------|--------------------------------------------------| | Read | 允许用户读取指定数据库 | | readWrite | 允许用户读写指定数据库 | | dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile | | userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 | | clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 | | readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限 | | readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限 | | userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 | | dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 | | root | 只在admin数据库中可用。超级账号,超级权限 |

  • 角色设置

    | 角色含义 | 角色 | |---------|------------------------------------------------------------------------------| | 数据库用户角色 | read、readWrite | | 数据库管理角色 | dbAdmin、dbOwner、userAdmin | | 集群管理角色 | clusterAdmin、clusterManager、4. clusterMonitor、hostManage | | 备份恢复角色 | backup、restore | | 所有数据库角色 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase | | 超级用户角色 | root | | 内部角色 | __system |

  • 创建admin超级管理员用户

    指定用户的角色和数据库:
    (注意此时添加的用户都只用于admin数据库,而非你存储业务数据的数据库)
    (在cmd中敲多行代码时,直接敲回车换行,最后以分号首尾)

    • user字段,为新用户的名字;

    • pwd字段,用户的密码;

    • cusomData字段,为任意内容,例如可以为用户全名介绍;

    • roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在roles字段,可以指定内置角色和用户定义的角色。

      超级用户的role有两种,userAdmin或者userAdminAnyDatabase(比前一种多加了对所有数据库的访问,仅仅是访问而已)。

    • db 是指定数据库的名字,admin是管理数据库。

    不能用admin数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库admin数据库,也只能查看admin数据库中创建的用户。

  • 创建一个不受访问限制的超级用户

  • 验证是否创建成功
  • 创建一个业务数据库管理员用户

    只负责某一个或几个数据库的増查改删

查看用户 {#查看用户}

删除用户 {#删除用户}

更新权限 {#更新权限}

修改密码 {#修改密码}

修改密码和用户信息 {#修改密码和用户信息}

数据库操作 {#数据库操作}

创建数据库 {#创建数据库}

  • MongoDB 创建数据库与切换数据库是一致的语法,格式如下:

如果数据库不存在,则创建数据库,否则切换到指定数据库。

  • 实例

以下实例我们创建了数据库 youj:

查看数据库 {#查看数据库}

  • 查看所有数据库命令:
  • 新建的数据库不会显示,只有插入了数据才会显示数据库
  • 查看当前数据库名称:

删除数据库 {#删除数据库}

  • MongoDB 删除数据库的语法格式如下:

    删除当前数据库,默认为 test。

集合操作 {#集合操作}

创建集合 {#创建集合}

  • 正经创建集合的语法格式:
  • 参数说明:

    • name: 要创建的集合名称
    • options: 可选参数, 指定有关内存大小及索引的选项
  • options 可以是如下参数:

| 字段 | 类型 | 描述 | |-------------|----|-----------------------------------------------------------------------------------------| | capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 | | autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 | | size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 | | max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |

在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。

  • 实例

在 test 数据库中创建 runoob 集合:

  • 在 MongoDB 中,你不一定要正经地创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

查看集合 {#查看集合}

  • 如果要查看已有集合,可以使用 show collectionsshow tables 命令:

删除集合 {#删除集合}

  • 语法格式:

如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。

  • 实例

    在数据库 mydb 中,我们可以先通过 show collections 命令查看已存在的集合: 接着删除集合 mycol2 :

文档操作 {#文档操作}

插入文档 {#插入文档}

  • 使用 insert()save() 方法向集合中插入文档,语法如下:

    • save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne()db.collection.replaceOne() 来代替。
    • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
  • 实例

以下文档可以存储在 MongoDB 的 w3cschool.cn 数据库 的 col集合中:

  • 查看已插入所有文档:
  • 我们也可以将数据定义为一个变量,如下所示:
  • 执行后显示结果如下:
  • 执行插入操作:
  • 插入文档你也可以使用 db.col.save(document)命令。如果不指定 _id 字段 save()方法类似于 insert()方法。如果指定 _id 字段,则会更新该 _id 的数据。

删除文档 {#删除文档}

  • 移除集合中的数据语法:
  • 参数说明:

    • query :(可选)删除的文档的条件。
    • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • 实例

以下文档我们执行两次插入操作:

使用 find() 函数查询数据:

接下来我们移除 title 为 'MongoDB 教程' 的文档:


如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:

如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):

更新文档 {#更新文档}

MongoDB 使用 update()save()方法来更新集合中的文档。

update() {#update}
  • update()方法用于更新已存在的文档。语法格式如下:

    参数说明:

    • query : update的查询条件,类似sql update查询的where子句。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为 sql update查询的set子句
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别。
  • 实例:

    我们在集合 col 中插入如下数据:

    接着我们通过 update() 方法来更新标题(title):

    可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"。

    以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

save() {#save}
  • save()方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。语法格式如下:

    参数说明:

    • document : 文档数据。
    • writeConcern :可选,抛出异常的级别。
  • 实例

    以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:

    替换成功后,我们可以通过 find() 命令来查看替换后的数据


  • 更多实例

    只更新第一条记录:

    全部更新:

    只添加第一条:

    全部添加进去:

    全部更新:

    只更新第一条记录:

查询文档 {#查询文档}

  • 查询数据的语法格式如下:

    find() 方法以非结构化的方式来显示所有文档。

    如果你需要以易读的方式来读取数据,可以使用 pretty()方法,语法格式如下:

    pretty()方法以格式化的方式来显示所有文档。

  • 实例

    以下实例我们查询了集合 col 中的数据:

    除了find() 方法之外,还有一个findOne() 方法,它只返回一个文档。

MongoDB 与 RDBMS Where 语句比较 {#MongoDB-与-RDBMS-Where-语句比较}
  • 如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

| 操作 | 格式 | 范例 | RDBMS中的类似语句 | |-------|------------------|-------------------------------------------------|------------------------------| | 等于 | {:} | db.col.find({"by":"w3cschool"}).pretty() | where by = 'w3cschool' | | 小于 | {:{$lt:}} | db.col.find({"likes":{$lt:50}}).pretty() | where likes < 50 | | 小于或等于 | {:{$lte:}} | db.col.find({"likes":{$lte:50}}).pretty() | where likes <= 50 | | 大于 | {:{$gt:}} | db.col.find({"likes":{$gt:50}}).pretty() | where likes > 50 | | 大于或等于 | {:{$gte:}} | db.col.find({"likes":{$gte:50}}).pretty() | where likes >= 50 | | 不等于 | {:{$ne:}} | db.col.find({"likes":{$ne:50}}).pretty() | where likes != 50 |


MongoDB AND 条件 {#MongoDB-AND-条件}

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。

语法格式如下:

  • 实例

以下实例通过 bytitle 键来查询 w3cschoolMongoDB 教程 的数据

以上实例中类似于 WHERE 语句:WHERE by='w3cschool' AND title='MongoDB 教程'

MongoDB OR 条件 {#MongoDB-OR-条件}
  • MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
  • 实例

以下实例中,我们演示了查询键 by 值为 w3cschool 或键 title 值为 MongoDB 教程 的文档。

AND 和 OR 联合使用 {#AND-和-OR-联合使用}
  • 以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: 'where likes>50 AND (by = 'w3cschool' OR title = 'MongoDB 教程')'

参考资料 {#参考资料}



文章链接:
https://www.zywvvd.com/notes/coding/dataset/mongodb-usage/mongodb-usage/

赞(0)
未经允许不得转载:工具盒子 » MongoDB 常用命令教程