• MongoDB常用操作


    1.MongoDB 概念解析

    Mongodb 逻辑结构                MySQL逻辑结构
    库(database)                  库
    集合(collection)              表
    文档(document)                数据行
    

    2.MongoDB基本命令

    2.1 默认存在的库

    通过 shell 连接 MongoDB 服务:
    [root@mongodb ~]# mongo
    MongoDB shell version v3.6.21
    connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
     
    查看当前的库 
    > db
    test
    
    查看所有的库
    >show databases/show dbs
    admin   0.000GB     # 系统预留库,MongoDB系统管理库
    config  0.000GB     # 本地预留库,存储关键日志
    local   0.000GB     # MongoDB配置信息库
    
    

    3.数据库操作

    3.1 创建数据库

    语法
    use DATABASE_NAME
    

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

    示例
    > use 111
    switched to db 111
    > db
    111
    > 
    
    如果想查看所有数据库,可以使用 show dbs 命令:
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    
    我们刚才创建的111库不在列表里面,那是因为我们要向111库里面插入数据后才能显示
    > use 111
    switched to db 111
    > db.test.insert({name:"数字"})
    WriteResult({ "nInserted" : 1 })
    > 
    > show dbs
    111     0.000GB
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    
    

    3.2 删除数据库

    语法
    db.dropDatabase()
    

    删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。

    示例
    > show dbs
    111     0.000GB
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    >
    > use 111
    switched to db 111
    > db.dropDatabase()
    { "dropped" : "111", "ok" : 1 }
    >
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    
    

    4.集合操作

    4.1 创建集合

    MongoDB 中使用 createCollection() 方法来创建集合。

    语法格式:
    db.createCollection(name, options)
    

    参数说明:

    • name: 要创建的集合名称
    • options: 可选参数, 指定有关内存大小及索引的选项
    字段 类型 描述
    capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
    size 数值 (可选)为固定集合指定一个最大值,即字节数。如果 capped 为 true,也需要指定该字段。
    max 数值 (可选)指定固定集合中包含文档的最大数量。
    示例

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

    > use test
    switched to db test
    > db.createCollection("a")
    { "ok" : 1 }
    > show collections
    a
    >
    > db.createCollection("b",{capped:true, size:1048576, max:1000})
    { "ok" : 1 }
    > show tables;
    a
    b
    >
    在 MongoDB 中,可以不提前创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
    > db.c.insert({name:"abc"})
    WriteResult({ "nInserted" : 1 })
    > show collections
    a
    b
    c
    

    4.2 删除集合

    语法格式:
    db.collection.drop()
    
    返回值

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

    示例
    > use test
    switched to db test
    > show collections
    a
    b
    c
    > db.a.drop()
    true
    > show collections
    b
    c
    
    
    > db.b.drop()
    true
    
    > show collections
    c
    

    5.文档操作

    • 文档的数据结构和 JSON 基本一样。
    • 所有存储在集合中的数据都是 BSON 格式。
    • BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

    5.1 插入文档

    MongoDB 使用 insert() 方法向集合中插入文档,语法如下:
    db.COLLECTION_NAME.insert(document)
    
    • insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
    db.collection.insertOne()db.collection.insertMany()
    db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
    db.collection.insertOne(
       <document>,
       {
          writeConcern: <document>
       }
    )
    
    db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:
    db.collection.insertMany(
       [ <document 1> , <document 2>, ... ],
       {
          writeConcern: <document>,
          ordered: <boolean>
       }
    )
    
    参数说明:
    • document:要写入的文档。
    • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
    • ordered:指定是否按顺序写入,默认 true,按顺序写入。
    示例
    > use test
    switched to db test
    
    > db.student.insert({name:"鸟哥", course:"linux", score:"100"})
    WriteResult({ "nInserted" : 1 })
    
    > db.student.find()
    { "_id" : ObjectId("5fe99d45d460359aa9383e4e"), "name" : "鸟哥", "course" : "linux", "score" : "100" }
    
    • 以上实例中 student 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
    • 查看已插入文档:db.student.find()

    5.2 更新文档

    update() 方法
    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    
    参数说明:
    • query : update的查询条件,类似sql update查询内where后面的。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别。
    示例
    > db.student.find()
    { "_id" : ObjectId("5fe99d45d460359aa9383e4e"), "name" : "鸟哥", "course" : "linux", "score" : "100" }
    
    > db.student.update({"name":"鸟哥"}, {$set:{"name":"鸟叔"}})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    > db.student.find()
    { "_id" : ObjectId("5fe99d45d460359aa9383e4e"), "name" : "鸟叔", "course" : "linux", "score" : "100" }
    
    可以看到name由原来的"鸟哥"更新为了"鸟叔"
    
    • 以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
    > db.student.update({"name":"鸟哥"}, {$set:{"name":"鸟叔"}}, {multi:true})
    

    5.3 删除文档

    • MongoDB remove()函数是用来移除集合中的数据。
    • 在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
    语法
    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )
    
    参数说明:
    • query :(可选)删除的文档的条件。
    • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
    • writeConcern :(可选)抛出异常的级别。
    示例:
    > db.student.insert({name:"鸟哥", course:"linux", score:"100"})
    WriteResult({ "nInserted" : 1 })
    
    > db.student.find()
    { "_id" : ObjectId("5fe99d45d460359aa9383e4e"), "name" : "鸟叔", "course" : "linux", "score" : "100" }
    { "_id" : ObjectId("5fe9b22cd460359aa938b37f"), "name" : "鸟哥", "course" : "linux", "score" : "100" }
    
    > db.student.remove({"name":"鸟叔"})
    WriteResult({ "nRemoved" : 1 })
    > db.student.find()
    { "_id" : ObjectId("5fe9b22cd460359aa938b37f"), "name" : "鸟哥", "course" : "linux", "score" : "100" }
    
    
    如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):
    > db.log.remove({})
    WriteResult({ "nRemoved" : 10000 })
    > db.log.find()
    > 
    

    5.4 查询文档

    批量数据录入
    数据录入:
    > for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})}
    WriteResult({ "nInserted" : 1 })
    
    查询数据行数:
    > db.log.count()
    10000
    
    全表查询:
    db.log.find()
    
    每页显示50条记录:
    > DBQuery.shellBatchSize=50; 
    
    按条件查询:
    > db.log.find({uid:999})
    { "_id" : ObjectId("5fe9a1e1d460359aa9389056"), "uid" : 999, "name" : "mongodb", "age" : 6, "date" : ISODate("2020-12-28T09:14:09.861Z") }
    
    以json格式显示数据:
    > db.log.find({uid:999}).pretty()
    {
    	"_id" : ObjectId("5fe9a1e1d460359aa9389056"),
    	"uid" : 999,
    	"name" : "mongodb",
    	"age" : 6,
    	"date" : ISODate("2020-12-28T09:14:09.861Z")
    }
    
    

    6.用户及权限管理

    6.1 注意事项

    验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆。
    
    对于管理员用户,必须在admin下创建.
    1. 建用户时,use到的库,就是此用户的验证库
    2. 登录时,必须明确指定验证库才能登录
    3. 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库
    4. 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.
    5. 从3.6 版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录。
    

    6.2 开启用户验证

    配置文件中,加入以下配置
    security:
      authorization: enabled
    
    重启mongodb
    systemctl restart mongod.service
    

    6.3 用户创建语法

    use admin 
    db.createUser
    {
        user: "<name>",
        pwd: "<cleartext password>",
        roles: [
           { role: "<role>",
         db: "<database>" } | "<role>",
        ...
        ]
    }
    
    基本语法说明:
    user:用户名
    pwd:密码
    roles:
        role:角色名
        db:作用对象 
    role:root, readWrite,read   
    验证数据库:
    mongo -u dev -p 123 10.0.0.53/dev
    

    6.4 用户管理示例

    创建管理员
    > use admin
    switched to db admin
    
    > db.createUser({user:"root", pwd:"root", roles:[{role:"root", db:"admin"}]})
    Successfully added user: {
    	"user" : "root",
    	"roles" : [
    		{
    			"role" : "root",
    			"db" : "admin"
    		}
    	]
    }
    
    
    创建普通用户
    > db.createUser({user:"dev", pwd:"dev", roles:[{role:"readWrite", db:"111"}]})
    Successfully added user: {
    	"user" : "dev",
    	"roles" : [
    		{
    			"role" : "readWrite",
    			"db" : "111"
    		}
    	]
    }
    
    鉴定用户
    正确返回1,错误返回0
    > db.auth('root','root')
    1
    
    > db.auth('dev','dev123')
    Error: Authentication failed.
    0
    
    登陆验证
    mongo -uroot -proot admin
    mongo -udev -pdev 111
    
    查看用户
    use admin
    db.system.users.find().pretty()
    
    删除用户
    > use 111
    switched to db 111
    
    > db.dropUser("dev")
    true
    
    
    • 这里需要用管理员用户
    • use到要删除用户作用的库下,这里是111库
    • 删除成功返回true

    因为有悔,所以披星戴月;因为有梦,所以奋不顾身! 个人博客首发:easydb.net 微信公众号:easydb 关注我,不走丢!

    image

  • 相关阅读:
    个人总结
    团队作业五
    个人项目五:个人回顾
    第二次冲刺
    第一次冲刺
    猜数字1
    随机数
    个人作业
    课后作业1
    作业
  • 原文地址:https://www.cnblogs.com/easydb/p/14203282.html
Copyright © 2020-2023  润新知