MongoDB的基本操作

数据库操作

  • 显示现有数据库

    1
    > show dbs
  • 创建、切换数据库

    1
    > use <database_name>
    • 如果数据库不存在,则创建数据库,否则切换到指定数据库
  • 删除数据库

    • 首先切换到目的数据库,然后执行以下命令:

      1
      > db.dropDatabase()

集合操作

  • 显示已有集合,以下两种都可以

    1
    2
    > show collections
    > show tables
  • 创建集合

    1
    > db.createCollection(<collection_name>, options)
    • 当插入文档时,MongoDB会自动创建集合

    • options可以选参数

      • capped(bool):是否创建固定大小的集合,当达到最大值时,会覆盖最早的文档,capped为true时,需要指定size参数
      • size(字节数):固定集合的最大值
      • max(数值):指定固定集合中文档的最大数目
      • 注:插入文档时,先检查size再检查max
    • 举例:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      >db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )

      # 以下为返回值
      {
      "ok" : 0,
      "errmsg" : "Collection already exists. NS: test.mycol",
      "code" : 48,
      "codeName" : "NamespaceExists"
      }
  • 删除集合

    1
    > db.<collection_name>.drop()

文档操作

  • 插入文档

    1
    2
    3
    > db.<collection_name>.insert(document,<options>)
    > db.<collection_name>.insertOne()
    > db.<collection_name>.insertMany()
    • 如果主键已经存在,会抛出异常 org.springframework.dao.DuplicateKeyException

    • insertMany方法插入的是一个document的list

    • options说明

      • writeConcern:写入策略,默认为1表示要求确认写策略,0表示不要求
      • ordered:是insertMany中的,指定是否按顺序写入,默认为truefalse表示不按顺序
    • 举例:

      1
      2
      3
      4
      5
      6
      7
      > db.collection.insertMany(
      [ <document 1> , <document 2>, ... ],
      {
      writeConcern: <document>,
      ordered: <boolean>
      }
      )
  • 更新文档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    > db.collection.update(
    <query>,
    <update>,
    {
    upsert: <boolean>,
    multi: <boolean>,
    writeConcern: <document>
    }
    )
    • options:
      • query:查询条件,如{'id':1}代表id=1
      • update:更新操作符
      • upsert:如果不存在,是否插入,默认为false
      • multi:更新找到的所有记录,默认为false,表示只更新找到的第一条
      • writeconcern:抛出异常的级别
  • 删除文档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > db.collection.remove(
    <query>,
    {
    justOne: <boolean>,
    writeConcern: <document>
    }
    )
    # 删除一条满足query的
    > db.collection.deleteOne(<query>)
    # 删除所有满足query的
    > db.collection.deleteMany(<query>)
  • 查询文档

    1
    2
    > db.<collection_name>.find(<query>, <projection>)
    > db.<collection_name>.find(<query>, <projection>).pretty() # 返回格式化的文档,显得更加直观
    • query是查询条件
    • projection表示使用投影操作返回指定的字段
  • 具体<query>如何书写,在下一节(MongoDB的高级查询)中介绍

用户操作

  • 一旦执行过一次createUser,Localhost Exception立即消失,只能通过验证后才能进行创建操作

  • 用户的role

    • 用户角色:readreadWrite
    • 数据库管理角色:dbAdmindbOwneruserAdmin
    • 超级用户:root
    • 所有数据库角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
  • 创建管理员用户

    1
    2
    > use admin
    > db.createUser( {user: "root",pwd: "123456",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
  • 创建普通用户

    1
    2
    > use db1
    > db.createUser( {user: "user1",pwd: "123456",roles: [ { role: "readWrite", db: "db1" } ]})
  • 修改用户

    1
    2
    3
    4
    1. 修改权限
    db.updateUser("<user_name>",{roles:[role1,role2...]})
    2. 修改密码
    db.updateUser("<user_name>","pwd")
  • 密码认证

    1
    > db.auth("<user_name>","pwd")
  • 删除用户

    1
    > db.dropUser("<user_name>")
  • 查看用户列表

    1
    > db.system.users.find()