zoukankan      html  css  js  c++  java
  • MongoDB操作命令

    用户权限

    基本指令

    mongo的操作指令一般是要在指定的一个库下面进行的。命令 参数 数据库等大小写敏感。    mongodb安装

    进入mongo命令:mongo   刚安装完mongodb是没有开启权限,没有用户的。

    切换数据库:user admin   切换到amin数据库

    显示当前数据库用户:show users

    显示数据库:show dbs

    推出momgodb:exit

    刚安装完mongodb后,需要创建一个root权限的用户,然后修改配置文件开启权限验证,然后重启mongodb服务。

    [root@wdq ~]# mongo
    MongoDB shell version v4.2.2
    connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("4fea1f3b-05f9-4634-870a-ced1e95eaceb") }
    MongoDB server version: 4.2.2
    > use admin
    switched to db admin
    > db.createUser({user:"root",pwd:"root",roles:[  {role:"root", db:"admin" } ]})
    创建用户
    > db.auth("root","wdq123")
    1
    
    1表示成功
    验证用户 相当于登录

    用户操作

    创建用户

    db.createUser({user:"root",pwd:"root",roles:[  {role:"root", db:"admin" } ]})
    user:用户名
    pwd:用户密码
    roles:用户权限,是一个数据(权限都要指定到库)
    role:具体的一个权限
    db:具体的一个库
    Vi创建用户

    比如说有一个CRM的库,我要给他创建用户。先切到CRM库上,在创建用户。

    修改密码

    > use ERP
    switched to db ERP
    > db.createUser({user:"crm",pwd:"crm",roles:[  {role:"dbOwner", db:"ERP" } ]})
    Successfully added user: {
        "user" : "crm",
        "roles" : [
            {
                "role" : "dbOwner",
                "db" : "ERP"
            }
        ]
    }
    > db.changeUserPassword("crm","crm1")
    > db.auth("crm","crm1")
    1
    > db.updateUser("crm",{pwd:"crm2"})
    2019-12-25T23:16:50.575+0800 E  QUERY    [js] uncaught exception: Error: Updating user failed: too many users are authenticated :
    _getErrorWithCode@src/mongo/shell/utils.js:25:13
    DB.prototype.updateUser@src/mongo/shell/db.js:1420:11
    @(shell):1:1
    > 
    修改用户密码changeUserPassword

    最后报错,因为db.auth多次。需要推出 exit。

    > exit
    bye
    [root@wdq ~]# mongo
    MongoDB shell version v4.2.2
    connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("3030ac06-bae6-41d6-b39a-d652af4d7c33") }
    MongoDB server version: 4.2.2
    > use admin
    switched to db admin
    > db.auth("root","wdq123")
    1
    > use ERP
    switched to db ERP
    > db.updateUser("crm",{pwd:"crm2"})
    > 
    修改用户密码db.updateUser

    删除用户

    > db.dropUser("erp")
    true
    删除用户

    修改用户权限

    方法一

    > db.grantRolesToUser("crm", [{role:"readWrite", db:"ERP"},{role:"read", db:"CacheERP"}]) 
    > use CacheERP
    switched to db CacheERP
    > show users
    >
    新增权限
    > show users
    {
        "_id" : "ERP.crm",
        "userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
        "user" : "crm",
        "db" : "ERP",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "ERP"
            },
            {
                "role" : "read",
                "db" : "CacheERP"
            },
            {
                "role" : "dbOwner",
                "db" : "ERP"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
    查看当前权限

     看到加入了两个权限

    > use ERP
    switched to db ERP
    > show users
    {
        "_id" : "ERP.crm",
        "userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
        "user" : "crm",
        "db" : "ERP",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "ERP"
            },
            {
                "role" : "read",
                "db" : "CacheERP"
            },
            {
                "role" : "dbOwner",
                "db" : "ERP"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
    > db.revokeRolesFromUser("crm",[{role:"readWrite", db:"ERP"}]) 
    > show users
    {
        "_id" : "ERP.crm",
        "userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
        "user" : "crm",
        "db" : "ERP",
        "roles" : [
            {
                "role" : "read",
                "db" : "CacheERP"
            },
            {
                "role" : "dbOwner",
                "db" : "ERP"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
    > 
    删除权限

    方法二

     db.updateUser   完全把用户权限清洗为当前设定的值。 慎用

    > show users
    {
        "_id" : "ERP.crm",
        "userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
        "user" : "crm",
        "db" : "ERP",
        "roles" : [
            {
                "role" : "read",
                "db" : "CacheERP"
            },
            {
                "role" : "dbOwner",
                "db" : "ERP"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
    > db.updateUser("crm",{roles:[ {role:"readWrite",db:"ERP"} ]})
    > show users
    {
        "_id" : "ERP.crm",
        "userId" : UUID("f970ce79-8725-4f0e-904c-a162b847a041"),
        "user" : "crm",
        "db" : "ERP",
        "roles" : [
            {
                "role" : "readWrite",
                "db" : "ERP"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
    > 
    修改权限
    基本增删查改

    客户端

    Studio 3T,破解方法可以百度。

    上面可以写基础sql,可以查看官方文档。

    数据库 

     1、添加

    > use mytestdb
    switched to db mytestdb
    添加数据库

     2、删除

    > use mytestdb
    switched to db mytestdb
    > db.dropDatabase()
    { "ok" : 1 }
    > 
    删除数据库

    集合(表)

    1、创建集合

    > use mytestdb
    switched to db mytestdb
    > db.createCollection("col1")
    { "ok" : 1 }
    > db.createCollection("col2")
    { "ok" : 1 }
    > 
    创建集合
    > db.col3.insert({"name":"wdq"})
    WriteResult({ "nInserted" : 1 })
    > 
    通过插入一条数据创建集合

     2、删除集合

    > show collections
    col1
    col2
    col3
    > db.col3.drop()
    true
    > show collections
    col1
    col2
    > 
    删除集合

    文档(一行数据)

    1、插入文档

    > db.col1.insert({name:'wdq',age:16})
    WriteResult({ "nInserted" : 1 })
    > 
    插入文档到集合

    如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档

    > db.col1.insertOne({name:'zdd',age:16})
    {
        "acknowledged" : true,
        "insertedId" : ObjectId("5e04d6551e1033670e11ccdd")
    }
    > 
    > db.col1.insertMany([{name:'www',age:10},{name:'zzz',age:11}])
    {
        "acknowledged" : true,
        "insertedIds" : [
            ObjectId("5e04d6b11e1033670e11ccde"),
            ObjectId("5e04d6b11e1033670e11ccdf")
        ]
    }
    > 
    插入文档到集合(单个 多个)

     2、更新文档

    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.col1.update({name:"wdq"},{$set:{age:100}},{upsert:true,multi:true})
    简单更新
    db.col1.save({_id:ObjectId("5e04d5af1e1033670e11ccdc"),name:"wdqwdq",age:110})
    根据ID替换现有文档
    只更新第一条记录:
    
    db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
    全部更新:
    
    db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
    只添加第一条:
    
    db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
    全部添加进去:
    
    db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
    全部更新:
    
    db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
    只更新第一条记录:
    
    db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
    View Code

    3、删除文档

    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )
    删除格式
    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
    writeConcern :(可选)抛出异常的级别
    参数说明

    remove() 方法 并不会真正释放空间。
    需要继续执行 db.repairDatabase() 来回收磁盘空间。
    > db.repairDatabase()
    或者
    > db.runCommand({ repairDatabase: 1 })

     remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法

    如删除集合下全部文档:
    db.inventory.deleteMany({})
    
    删除 status 等于 A 的全部文档:
    db.inventory.deleteMany({ status : "A" })
    
    删除 status 等于 D 的一个文档:
    db.inventory.deleteOne( { status: "D" } )
    delete

    集合 查询

    db.collection.find(query, projection)
    
    query :可选,使用查询操作符指定查询条件
    projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
    查询格式
    操作格式范例RDBMS中的类似语句
    等于(equal) {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
    小于(less than) {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
    小于或等于(lt equal) {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
    大于(greater than) {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
    大于或等于(gt equal) {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
    不等于(not equal) {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
    
    
    db.col.find({key1:value1, key2:value2}).pretty()
    AND
    >db.col.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()
    OR
    关键字说明
    $or 或关系
    $nor 或关系取反
    $gt 大于
    $gte 大于等于
    $lt 小于
    $lte 小于等于
    $ne 不等于
    $in 在多个值范围内
    $nin 不在多个值范围内
    $all 匹配数组中多个值
    $regex 正则,用于模糊查询
    $size 匹配数组大小
    $maxDistance 范围查询,距离(基于LBS)
    $mod 取模运算
    $near 邻域查询,查询附近的位置(基于LBS)
    $exists 字段是否存在
    $elemMatch 匹配内数组内的元素
    $within 范围查询(基于LBS)
    $box 范围查询,矩形范围
    $center 范围查询,圆形范围
    $centerSphere 范围查询,球形范围
    $slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
    --{"name":{"$regex":"正大"}}
    
    db.getCollection("subscribe_test").find({$or:[{"name":{"$regex":"正大"}},{"content":{"$regex":"正大"}}],"update_time":{$gte:1,$lte:2000000000},info_type:"00"})
    正则

    推荐文档

    https://www.jianshu.com/p/d03931badaa8

  • 相关阅读:
    寒假学习第九天
    寒假学习第八天
    寒假学习第七天
    寒假学习第六天
    寒假学习第五天
    寒假学习第四天
    寒假学习第三天
    寒假学习第二天
    寒假学习第一天
    阅读笔记
  • 原文地址:https://www.cnblogs.com/wudequn/p/12099783.html
Copyright © 2011-2022 走看看