基本操作:
帮助
help
KEYWORDS.help
KEYWORDS.[TAB]
不同级别和命令
db 数据库管理操作有关 db.help()
sh 和shard分片有关的命令 sh.help()
rs 复制集管理有关的命令 rs.help()
常用操作查看当前db版本
test> db.version()
3.2.6
显示当前数据库
test>db
test
或
>db.getName()
test
查询所有数据库
test> show dbs (==show databases)
local 0.000GB
切换数据库
> use local
switched to db local
显示当前数据库状态,查看local数据
test> use local
switched to db local
local> db.stats()
查看当前数据库的连接机器地址
> db.getMongo()
connection to 127.0.0.1
指定数据库进行连接:(默认连接本机test数据库)
# mongo 192.168.1.24/admin
[mongod@mongodb ~]$ mongo 192.168.1.24/admin
MongoDB shell version: 3.2.6
connecting to: 192.168.1.24/admin
admin>
创建数据库:当use的时候,系统就会自动创建一个数据库。如果use之后没有创建任何集合。系统就会删除这个数据库。
--删除数据库:(如果没有选择任何数据库,会删除默认的test数据库)
删除test数据库
test> show dbs
local 0.000GB
test 0.000GB
test> use test
switched to db test
test> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
集合操作(表操作)
-
创建集合
-
方法1:手动创建
admin>use app switched to db app app>db.createCollection('a') { "ok" : 1 } app>db.createCollection('b') { "ok" : 1 } >show collections //查看当前数据下的所有集(==show tables) a b 或 db.getCollectionNames() [ "a", "b" ]
-
方法2:当插入一个文档的时候,一个集合就会自动创建。
admin> use app switched to db app app>db.c.insert({username:"mongodb"}) WriteResult({ "nInserted" : 1 }) app> show collections a b c app> db.c.find() { "_id" : ObjectId("5743c9a9bf72d9f7b524713d"), "username" : "mongodb" } **或者使用db.c.find().pretty()来优化显示效果**
-
-
删除集合
app> use app switched to db app app> db.log.drop() //删除集合
重命名集合
把log改名为log1
app> db.log.renameCollection("log1")
{ "ok" : 1 }
app> show collections
a
b
c
log1
-
for循环插入数据
app> for(i=0;i<100;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }
-
查询集合中的记录数
app> db.log.find() //查询所有记录
注:默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
设置每页显示数据的大小:
DBQuery.shellBatchSize=50; //每页显示50条记录app> db.log.find({uid:'50'}) //查询uid位50的记录,相当于mysql的where条件 app> db.log.findOne() //查看第1条记录 app> db.log.count() //查询总的记录数
-
删除集合中的记录数
app> db.log.remove({}) //删除集合中所有记录 db.log.distinct("name") //查询去掉当前集合中某列的重复数据: [ "mm" ]
-
查看集合存储信息
app>db.log.stats() app> db.log.dataSize() //集合中数据的原始大小 app> db.log.totalIndexSize() //集合中索引数据的原始大小 app>db.log.totalSize() //集合中索引+数据压缩存储之后的大小 app> db.log.storageSize() //集合中数据压缩存储的大小
SQL语言与CRUD语言对照
SQL Schema Statements | MongoDB Schema Statements |
---|---|
CREATE TABLE users (id MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30),age Number,status char(1),PRIMARY KEY (id)) | Implicitly created on firstinsert()operation. The primary key_idisautomatically added if_idfield is not specified.db.users.insert( {user_id: "abc123",age: 55,status: "A"} ) However, you can also explicitly create a collection: db.createCollection("users") |
ALTER TABLE users ADD join_dateDATETIME | 在Collection 级没有数据结构概念。然而在document级,可以通过set: { join_date: new Date() } },{ multi: true }) |
ALTER TABLE usersDROP COLUMN join_date | 在Collection 级没有数据结构概念。然而在document级,可以通过unset: { join_date: "" } },{ multi: true }) |
CREATE INDEX idx_user_id_asc ON users(user_id) | db.users.createIndex( { user_id: 1 } ) |
CREATE INDEX idx_user_id_asc_age_desc ON users(user_id, age DESC) | db.users.createIndex( { user_id: 1, age: -1 } ) |
DROP TABLE users | db.users.drop() |
插入语句 | |
SQL INSERT Statements | MongoDB insert() Statements |
INSERT INTO users(user_id,age,status)VALUES ("bcd001",45,"A") | db.users.insert({ user_id: "bcd001", age: 45, status:"A" }) |
查询类语句 | |
SQL SELECT Statements | MongoDB find() Statements |
SELECT * FROM users | db.users.find() |
SELECT id,user_id,status FROM users | db.users.find({ },{ user_id: 1, status: 1, _id: 0 }) |
SELECT user_id, status FROM users | db.users.find({ },{ user_id: 1, status: 1 }) |
SELECT * FROM usersWHERE status = "A" | db.users.find({ status: "A" }) |
SELECT user_id, status FROM users WHERE status = "A" | db.users.find({ status: "A" },{ user_id: 1, status: 1, _id: 0 }) |
数据更新操作 | |
SQL Update Statements | MongoDB update() Statements |
UPDATE users SET status = "C" WHERE age > 25 | db.users.update({ age: { set: { status: "C" } },{ multi: true }) |
UPDATE users SET age = age + 3 WHERE status = "A" | db.users.update({ status: "A" } ,{ $inc: { age: 3 } },{ multi: true }) |
数据库删除操作 | |
DELETE FROM usersWHERE status = "D" | db.users.remove( { status: "D" } ) |
DELETE FROM users | db.users.remove({}) |
用户权限管理
创建管理员用户
-
(1)创建用户
use admin db.createUser( { user: "root", pwd: "root", roles: [ { role: "root", db: "admin" } ] } )
注意:
1、创建管理员角色用户的时候,必须要到admin下创建
2、删除的也要到相应的库下操作use admin db.dropuser('root');
-
(2)验证
db.auth("root","root")
-
(3)配置文件开启auth验证
cat >>mongodb.conf<<EOF security: authorization: enabled EOF
-
(4)重启mongodb
测试用户可用性:[mongod@db01 ~]$ mongo -uroot -proot admin
注意:用户在哪个数据库下创建的,最后加上什么库,数据库内验证:
[mongod@db01 ~]$ mongo > use admin > db.auth("root","root")
2、按生产需求创建应用用户
-
例1.创建对某库的只读用户--test
-
创建对某库的只读用户
use test db.createUser( { user: "test", pwd: "test", roles: [ { role: "read", db: "test" } ] } ) db.auth("test","test") show users;
-
登录test用户,并测试
db.createCollection('b')
-
-
例2.创建某库的读写用户
db.createUser( { user: "test1", pwd: "test1", roles: [ { role: "readWrite", db: "test" } ] } ) show users; db.auth("test1","test1")
-
例3.创建 分别对多库的不同权限的用户
use app db.createUser( { user: "app03", pwd: "app03", roles: [ { role: "readWrite", db: "app", } ] } )
例4.删除用户
删除app01用户:先登录到admin数据库
mongo -uroot –proot 192.168.1.24/admin
use app
db.dropUser("app01")