mongo语句大全
admin
2023-06-06 07:41:26
0

一、基础语句


1.创建数据库并查看当前数据库

     > use wang

     > db


2.查看数据库的版本

    > db.version()


3.删除数据库

     > use wang

     > db.dropDatabase()


4.插入文档

     > db.test.insert({ id : 1 , "name " : "wangchongyang" ,"age" : 19, " hobby":" read "})


5.更新文档

     > db.test.update({id:1},{$set:{ id : 11}})


6.删除文档

     > db.test.remove({ id : 11})


7.查询文档

     > db.test.find()

     > db.test.findOne()

     > db.test.find({ id : 11})


8.文档排序

     > db.test.find().sort().sort({ "id" : 1})          1 升序,-1 降序


9.创建索引

     > db.test.ensureIndex({ id : 1 })                1 按升序创建索引   -1降序


10.删除索引

     > db.test.dropIndex( id )


11.聚合

     > db.test.aggregate({ $group : { _id: "name",num : { $num : 1 }} })


12.备份与恢复

      mongodump -h  127.0.0.1:27017 -d  test  -o  /tmp/mongo_backup


     

     mongorestore -d  test /tmp/mongo_backup/*


13.去掉重复数据

     > db.test.distinct( ' name' )


二、集合语句指导


1.查看集合帮助

     db.test.help()


2.查看集合总数量

     db.test.count()


3.查看表空间大小

     db.test.dataSize()


4.查看集合所在的数据库

     db.test.getDB()


5.查看当前集合状态

     db.test.stats()


6. 集合重命名

     db.test.renameCollection("testdb")


7.删除集合

     db.testdb.drop()


8. 查看当前数据库所有集合

   db.getCollectionNames()


9. 查看所有集合的状态

     db.printCollectionStats();


10.现有表以及数据添加字段

     db.test.update({}, {$set:{nFlagState:0}}, false, true);


11.查看当前连接数

     db.serverStatus().connections


三、复制以及分片语句


1. 配置mongodb 集群中一个Replica Sets模式的shard,并初始化

     config = {_id: 'shard4', members: [

             {_id: 0, host: '10.181.49.224:27001'},

             {_id: 1, host: '10.181.49.221:27002'},

             {_id: 2, host: '10.181.49.222:27003'}]

           }

     rs.initiate(config)


2. 将一个shard 加入到集群中

     db.runCommand({addshard:"shard4/10.181.49.224:27001,10.181.49.221:27002,10.181.49.224:27002",name:"shard2"})


3. 查看shard 信息

     db.runCommand({listshards:1})

4. 将一个库使用shard

     db.runCommand({ enablesharding:"okooo" })


5. 查看replica set  的状态

      rs.status()  


 state字段说明


0Starting up, phase 1
1Primary
2Secondary
3Recovering
4Fatal error
5Starting up, phase 2
6Unknown state
7Arbiter
8Down


heath字段说明


0Server is down
1Server is up



6. 查看replica set   中是否是主节点

     rs.isMaster()


7.查看当前数据库的数据同步状态

     db.printReplicationInfo()


8. 查看整个shard的同步状态

     db.printSlaveReplicationInfo()


9. 当前运行的进程

     db.currentOp();


10. 看数据库信息

     db.stats()


11. 看数据实例信息

     db.serverStatus()


12. (在主库上执行)增加一个从库

     rs.add("192.168.8.226:27004")


13. (在主库上执行)减少一个从库

     rs.remove("192.168.8.226:27004")


14. 看表的状态 

     db.users.stats()


15. 看shard 状态

     db.printShardingStatus()     

     db.printShardingStatus( true )  

 

16. 对已有的表进行shard

     db.runCommand({ shardcollection: "test.users_2", key: { _id:1 }})             --users_2表根据_id 键分区


17. 移除一个shard 

     db.runCommand({"removeshard" : "localhost:20002"});


18.  从库支持查询

     db.getMongo().setSlaveOk()


19. 查看慢查询

     db.system.profile.find()


20. 打开profile

     打开profile有两种

     一种直接在启动参数里直接设置,启动 MongoDB时加上  --profile=级别即可。

     另一种就是客服端调用后db.setProfilingLevel(级别,秒数) ,但是这只影响本次会话。


21.启用分片

      db.adminCommand({"enableSharding" : "blog"})            在blog 库上建立sharding


22.在blog库上的posts表上利用date和author两个字段建立sharding

     db.adminCommand({"shardCollection" : "blog.posts", key : {"date" : 1, "author" : 1}}   



四、用户管理

     

          MongoDB 默认的启动是不验证用户名和密码的,启动MongoDB ,可以直接用MongoDB 连接上来,对所有的库具有root 权限。所以启动的时候指定参数,可以阻止客户端的访问和连接。

          

            先启用系统的登录验证模块, 只需在启动时指定 auth 参数即可,如:

          [root@template ~]#  mongod --auth

          [root@template ~]# mongo

          MongoDB shell version: 2.6.0

          connecting to: test

          >


          在最初始的时候 MongoDB 都默认有一个 admin 数据库(默认是空的), admin.system.users 中将会保存比在其它数据库中设置的用户权限更大的用户信息。

          注意:当 admin.system.users 中没有添加任何用户时,即使 MongoDB 启动时添加了 --auth参数,如果在除 admin 数据库中添加了用户,此时不进行任何认证依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一个用户。


1.建立系统root用户


> show dbs

admin  (empty)

local  0.078GB

> use admin

switched to db admin

> db.createUser({user:"gyw",pwd:"123456",roles:[{role:"root",db:"admin"}]})

Successfully added user: {

        "user" : "gyw",

        "roles" : [

                {

                        "role" : "root",

                        "db" : "admin"

                }

        ]

}

> show dbs

2016-07-29T09:19:32.668+0800 listDatabases failed:{

        "ok" : 0,

        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",

        "code" : 13

} at src/mongo/shell/mongo.js:47

提示没有权限失败


重新以认证的方式登录数据库


mongo --port 27017 -u gyw -p 123456 --authenticationDatabase admin

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

> use admin

switched to db admin

> db.system.users.find()

{ "_id" : "admin.gyw", "user" : "gyw", "db" : "admin", "credentials" : { "MONGODB-CR" : "871b1cf91cd1ebb7acf0f4040af47979" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }



2.创建单库最大权限用户


> use test

switched to db test

> db.test.insert({id:1,name:"mi"})

WriteResult({ "nInserted" : 1 })

> db.createUser({user:"wjb",pwd:"123456",roles:[{role:"dbOwner",db:"test"}]})

Successfully added user: {

        "user" : "wjb",

        "roles" : [

                {

                        "role" : "dbOwner",

                        "db" : "test"

                }

        ]

}

> use admin

switched to db admin

> db.system.users.find()

{ "_id" : "admin.gyw", "user" : "gyw", "db" : "admin", "credentials" : { "MONGODB-CR" : "871b1cf91cd1ebb7acf0f4040af47979" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }

{ "_id" : "test.wjb", "user" : "wjb", "db" : "test", "credentials" : { "MONGODB-CR" : "3ec31d8a58e61f450c5988b546dfde4b" }, "roles" : [ { "role" : "dbOwner", "db" : "test" } ] }


我们无权限认证登录看能否访问test数据库

[root@template 27017]# mongo --port 27017

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }

> use test

switched to db test

> show collections

2016-07-29T09:26:17.440+0800 error: {

        "$err" : "not authorized for query on test.system.namespaces",

        "code" : 13

} at src/mongo/shell/query.js:131

可以发现提示我们没有权限



通过权限认证登录


[root@template 27017]# mongo --port 27017 -u wjb -p 123456 --authenticationDatabase test

MongoDB shell version: 2.6.0

connecting to: 127.0.0.1:27017/test

Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }

> use test

switched to db test

> show collections

system.indexes

test


下方列出系统内置角色名称:

Database User Roles 普通用户角色

read

readWrite

Database Administration Roles 管理员角色

dbAdmin        可以管理数据库

dbOwner        单数据库最大权限,dbAdmin,userAdmin

userAdmin     可管理当前数据库用户

Cluster Administration Roles  管理员角色

clusterAdmin

clusterManager

clusterMonitor

hostManager

Backup and Restoration Roles  备份和恢复角色

backup

restore

All-Database Roles 所有数据库角色

readAnyDatabase       在admin下建立,可以读取所有数据库的信息

readWriteAnyDatabase  在admin下建立,可以读写所有数据库的信息

userAdminAnyDatabase  在admin下建立,可以管理所有数据库的用户

dbAdminAnyDatabase    在admin下建立,可以管理所有数据库的信息(类似于所有数据库的dbAdmin账户)


Superuser Roles ()

root
















相关内容

热门资讯

孙杨还没明白,公众为什么不溺爱... 随着最新一期《妻子的浪漫旅行》播出,不知多少人共情了被孙杨气哭的张豆豆,猛然发现自己出走半周却还是被...
空调板掰了一下不归位了 如果空调板掰了一下不归位了,你可以尝试以下方法来解决问题:1. 重新调整:再次轻轻掰动空调板,看是否...
美的空调一下制冷一下不制冷 1、如果空调内部的氟利昂过多,再运行一段时间之后,压力过高就会进入保护状态,等到系统凉下来之后又可恢...
空调遥控器摔一下不显示了 原因可能是电池摔错位了,可以重新连接好正负极解决;原因可能是红外灯接触不良,可以维修发射器解决;原因...
空调遥控器摔了一下不显示了怎么... 空调遥控器摔了一下不显示,把电池拿掉,然后按遥控器的按键,使电充分的放完,放置五分钟,然后安装好电池...
枪手向白宫附近安检站连开3枪,... 据凤凰卫视报道,美国白宫周边5月23日晚传出多声枪响后,白宫一度封锁。据报一名枪手向白宫附近安检站开...
空调遥控器摔了一下不显示了 原因可能是遥控器后面电池正负极没有正确接对,可以将电池拆卸下来重装解决;原因可能是屏幕损坏,可以维修...
美国特勤局:白宫附近枪击案嫌疑... 央视记者当地时间5月23日获悉,美国特勤局表示,当天白宫附近枪击案嫌疑人在医院死亡。美国特勤局表示,...
浙江宣传:年轻干部,不要怕普通 有没有那么一瞬间,你会觉得自己很普通,置身人潮人海中没有任何特别之处?其实,普通既是初入职场的年轻干...
Find My进入第三方时代:... 新闻引入 2026年1月,苹果发布AirTag 2代,精确查找范围提升50%、扬声器音量提升50%,...