mongodb command
Mongodb 常用命令介紹
(1)對於初學者,要善於使用 help 命令, 然後看命令註釋,
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
rs.help() help on replica set methods
help connect connecting to a db help
help admin administrative help
help misc misc things to know
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
use
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
exit quit the mongo shell
(2) 一個伺服器上可以 包含多個資料庫(dbs),一個db 包含多個集合(collections), 此結構與mysql非常類似,當然在關係型資料庫mysql中,是不存在集合的概念的,而mongodb中db ,collection 都是隱式建立的
> show dbs //列出當前伺服器的所有資料庫
admin
local
richinfo
test
> use test1 // 切換資料庫
switched to db test1
> db // 顯示當前資料庫
test1
> show collections //列出當前資料庫中所有的集合
> db.ee_info.save({name:"gabriel",position:"DBA",age:29,sex:"F"});
> show collections
ee_info
system.indexes
> show dbs
admin
local
richinfo
test
test1
以上隱式建立了 一個 test1 的db; ee_info的集合。
(3) mongodb 的資料庫複製功能 db.copyDatabase() 可以在local 和remote 伺服器上進行資料庫的複製,db.cloneDatabase() 也可以實現remote 資料庫的複製。
> show dbs
admin
local
richinfo
test
test1
> db.copyDatabase("test1","test2");
{ "ok" : 1 }
> show dbs
admin
local
richinfo
test
test1
test2
> use test2
switched to db test2
> db.ee_info.find();
{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }
> db.dropDatabase();
{ "dropped" : "test2", "ok" : 1 }
> show dbs
admin
local
richinfo
test
test1
(4) 使用getSisterDB() 獲取其他資料庫的引用, 一般情況下我們使用 use 語句可以實現資料庫的切換, 但是如果我們在current database A 操作 database B 中的集合, getSisterDB() 就能很好的引用
> use test
switched to db test
> db
test
> test1.ee_info.find();
Thu Jul 7 16:21:41 ReferenceError: test1 is not defined (shell):0
> test1=db.getSisterDB("test1");
test1
> test1.ee_info.find();
{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }
> db
Test
(4) 作為DBA可以使用fsync 強制性的將記憶體中的資料寫於資料檔案。Asymc 表示非同步寫
> db.runCommand({fsync:1});
{ "errmsg" : "access denied; use admin db", "ok" : 0 }
> use admin
switched to db admin
> db.runCommand({fsync:1});
{ "numFiles" : 8, "ok" : 1 }
> db.runCommand({fsync:1,async:true});
{ "numFiles" : 8, "ok" : 1 }
(5)作為DBA 有時為了備份,整理資料庫,需要將系統鎖定,mongodb 的 鎖定模式也不進行讀阻塞。 以下用3個session 模擬鎖機制
Session1 鎖定操作:
> db
admin
> db.copyDatabase("test1","test2");
{ "ok" : 1 }
> show dbs
admin
local
richinfo
test
test1
test2
> db.runCommand({fsync:1,lock:1});
{
"info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",
"ok" : 1
}
>
Session2:
[mongodb@tes102 ~]$ cd /soft/mongodb-linux-x86_64-1.6.5/bin/
[mongodb@tes102 bin]$ ./mongo 192.168.18.102:10001
MongoDB shell version: 1.6.5
connecting to: 192.168.18.102:10001/test
> use test1
switched to db test1
> db.ee_info.find(); //讀沒有阻塞
{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }
> db.ee_info.save({name:"wangxiangtao",age:23}); //寫已經產生等待
Session3
[root@tes102 ~]# su - oracle
su: user oracle does not exist
[root@tes102 ~]# su - mongodb
[mongodb@tes102 ~]$ cd /soft/mongodb-linux-x86_64-1.6.5
[mongodb@tes102 mongodb-linux-x86_64-1.6.5]$ cd bin/
[mongodb@tes102 bin]$ ./mongo 192.168.18.102:10001
MongoDB shell version: 1.6.5
connecting to: 192.168.18.102:10001/test
> use test2
switched to db test2
> db.ee_info.find();
^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A // 直接等待
-----------------------在session1 直接解鎖, session2, session3 均恢復正常
> db.$cmd.sys.unlock.findOne();
{ "ok" : 1, "info" : "unlock requested" }
>
在session3 中查詢資料:
> test2=db.getSisterDB("test2");
test2
> db.ee_info.find();
{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }
{ "_id" : ObjectId("4e1571770a2bdd1c776e5239"), "name" : "wangxiangtao", "age" : 23 }
> test1=db.getSisterDB("test1");
test1
> db.ee_info.find();
{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }
{ "_id" : ObjectId("4e1571770a2bdd1c776e5239"), "name" : "wangxiangtao", "age" : 23 }
>
(5) 驗證集合的正確性:
> show collections
system.indexes
tt
> db.tt.validata();
Thu Jul 7 17:22:02 TypeError: db.tt.validata is not a function (shell):0
> db.tt.validate();
{
"ns" : "blog.tt",
"result" : "\nvalidate\n firstExtent:0:2500 ns:blog.tt\n lastExtent:0:2500 ns:blog.tt\n # extents:1\n datasize?:52 nrecords?:1 lastExtentSize:3328\n padding:1\n first extent:\n loc:0:2500 xnext:null xprev:null\n nsdiag:blog.tt\n size:3328 firstRecord:0:25b0 lastRecord:0:25b0\n 1 objects found, nobj:1\n 68 bytes data w/headers\n 52 bytes data wout/headers\n deletedList: 0000000100000000000\n deleted: n: 1 size: 3084\n nIndexes:1\n blog.tt.$_id_ keys:1\n",
"ok" : 1,
"valid" : true,
"lastExtentSize" : 3328
}
>
總結: mongodb 與oracle mysql 比起來, 差距還是蠻大的, 特別從lock 的測試中可以看出,一個會話等待,另外一個會話的讀也阻塞了。
路漫漫,生活繼續,工作繼續………………………………….
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8117479/viewspace-701642/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mongodb commandMongoDB
- MongoDB原始碼分析之Command體系架構CJMongoDB原始碼架構
- MongoDB報錯"not authorized on root to execute command"問題解決一例MongoDBZed
- MongoDB 檢視DDL檢視not authorized on xxx to execute command { find: system.viewsMongoDBZedView
- command模式模式
- Git commandGit
- v$sql.command_type and v$session.commandSQLSession
- V$SESSION COMMANDSession
- pip: command not found
- linux commandLinux
- oracle dump commandOracle
- sed command reviewView
- [Bash] watch command
- [Bash] cp command
- [Bash] mv command
- [Bash] mkdir command
- [Bash] echo command
- [Bash] awk command
- [Bash] Kill command
- [Bash] curl command
- [Bash] grep command
- mac mysql: command not foundMacMySql
- Command 模式 Step by Step模式
- 命令模式(Command Pattern)。模式
- express: command not found.Express
- linker command failedAI
- command for ContextMenu in DataTemplateContext
- Linux find commandLinux
- db2_commandDB2
- [Bash] read command
- redis的command命令Redis
- 【mongodb】mongodb的安裝MongoDB
- [review]Design Pattern:CommandView
- Mac -bash: mysql: command not foundMacMySql
- Cesium渲染模組之Command
- docker中command的使用Docker
- -bash :gradlew command not foundGradle
- Oracle Linux xargs CommandOracleLinux