您的位置:首页 > 编程语言 > Go语言

mongo语句大全

2016-09-07 14:14 337 查看
一、基础语句

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 普通用户角色readreadWriteDatabase Administration Roles 管理员角色dbAdmin 可以管理数据库dbOwner 单数据库最大权限,dbAdmin,userAdminuserAdmin 可管理当前数据库用户Cluster Administration Roles 管理员角色clusterAdminclusterManagerclusterMonitorhostManagerBackup and Restoration Roles 备份和恢复角色backuprestoreAll-Database Roles 所有数据库角色readAnyDatabase 在admin下建立,可以读取所有数据库的信息readWriteAnyDatabase 在admin下建立,可以读写所有数据库的信息userAdminAnyDatabase 在admin下建立,可以管理所有数据库的用户dbAdminAnyDatabase 在admin下建立,可以管理所有数据库的信息(类似于所有数据库的dbAdmin账户)

Superuser Roles ()
root
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongo