MongoDB資料庫常用操作命令
常用操作
檢視幫助
db.help()
當前資料庫的版本
db.version()
當前使用的資料庫
db.getName()
當前資料庫的狀態
db.stats()
當前資料庫的地址
db.getMongo()
查詢錯誤資訊
db.getPrevError()
清除錯誤記錄
db.resetError()
資料庫伺服器狀態
db.serverStatus()
資料庫database操作
建立資料庫
use Person
切換資料庫
use Person
刪除資料庫
db.dropDatabase()
檢視所有資料庫
show dbs
克隆指定地址的資料庫
db.cloneDatabase(“127.0.0.1”)
複製指定資料庫的資料到指定資料庫
db.copyDatabase(“被複制的資料庫”,”粘貼後資料庫”,”粘貼後地址”)
修復資料庫
db.repairDatabase()
注意:
* 當創作一個集合,即table時,會自動建立當前資料庫
* 刪除資料庫時,必須先切換到對應的資料庫,再執行刪除。
- 集合collection操作
建立collection,即table
db.createCollection(表名,{size:50,capped:5,max:100 })
刪除table
db.col.drop()
得到所有table
db.getCollectionNames()
顯示當前talbe狀態
db.printCollectionStats()
顯示所有collection
show collections
獲取當前集合所在資料庫
db.person.getDB()
複製集合
// col被複制到person
db.col.copyTo('person')
顯示使用者
show users
// 或
db.getUsers()
新增使用者
db.addUser(“使用者名稱稱”)
// 或
db.addUser(“使用者名稱稱”,”使用者密碼”,true為只讀)
刪除使用者
db.removeUser(“使用者名稱”)
資料庫認證,安全模式,即身份驗證
// 登入
db.auth(“使用者名稱稱”,”密碼”)
// 退出
db.logout()
登入資料庫
mongo -u 使用者名稱 -p 密碼 —-authenticationDatabase 資料庫
索引操作
建立索引
// 1為升序,-1為降序
db.col.ensureIndex({“key”:1,”key”:-1})
刪除指定索引
db.col.dropIndex(“key”)
刪除所有索引
db.col.dropIndexes()
獲取當前所有索引
db.col.getIndexes()
獲取當前所有index資訊
db.col.reIndex()
檢視索引大小
db.col.totalIndexSize()
資料操作
文件的資料結構和JSON基本一樣,所有儲存在集合中的資料都是BSON格式。BSON是一種類json的一種二進位制形式的儲存格式,簡稱Binary JSON。
操作格式:db.資料庫名稱.操作型別({‘key’:’value’})
插入資料
db.col.insert({key:’value’,key:’value’})
// 或
db.col.save({key:’value’,key:’value’})
// 或 先將Json定義成變數後再操作
object=({key:’value’,key:’value’})
db.col.save(object)
檢視資料
db.col.find()
// 或 查詢第一條資料
db.col.findOne()
// 或 查詢前n條資料
db.col.find().limit(n)
// 或 查詢n條以後的資料
db.col.find().skip(n)
// 或 查詢某個結果的記錄條數
db.col.find(‘key’).count()
// 或 過濾重複資料
db.col.distinct(‘key’)
// 或 查詢指定資料
db.col.find({‘key’:’value’})
// 或 查詢大於某個值n的記錄
db.col.find({‘key’:{$gt:n}})
// 或 查詢小於某個值n的記錄
db.col.find({‘key’:{$lt:n}})
// 或 查詢大於等於某個值n的記錄
db.col.find({‘key’:{$gte:n}})
// 或 查詢小於等於某個值n的記錄
db.col.find({‘key’:{$lte:n}})
// 或 查詢大於等於n1,且小於等於某個值n2的記錄
db.col.find({‘key’:{$gte:n1,$lte:n2}})
// 或 查詢等於n1,或等於n2的記錄
db.col.find({$or:[{‘key’:n1},{’key’:n2}]})
// 或 查詢包含某個值value的記錄
db.col.find({‘key’:/value/})
// 或 查詢以某個值value開頭的記錄
db.col.find({‘key’:/^value/})
// 或 查詢大於某個值n的記錄
db.col.find({‘key’:{$gt:n}})
// 或 查詢某個條件下的指定列的記錄
db.col.find({‘key’:’value’},{‘key’:1,’key’:1,…}})
// 或 查詢按指定條件排序的記錄。注意:1為升序,-1為降序
db.col.find().sort({‘key’:1})
注意:
1 查詢條件等式小於lt,小於等於 lte,大於gt,大於等於 gte,不等於ne2查詢聯合條件在某個範圍內 in,不是not,或是 or
3 匹配自身,或不存在的null,存在的$exists
刪除資料
db.col.remove({‘key’:’value’})
修改資料
db.col.update({‘key’:’value’},{$set:{‘key’:’value’}},false,true)
// 或 某個條件下的值增加n
db.col.update({‘key’:’value’},{$inc:{‘key’:n}})
多種操作合併,如查詢修改刪除
db.col.findAndModify({query:{‘key’:’value’},sort:{‘key’:1},update:{$set:{‘key’:’value’}},remove:false})
// 或
db.runCommand({findandmodify:col,query:{‘key’:’value’},sort:{‘key’:-1},update:{$set:{‘key’:’value’}},remove:false})
其他操作
物件轉換成json
tojson(new Object({‘key’:’value’}))
遊標查詢
轉換成陣列
var array = db.col.find()
顯示記錄
while (array.hasNext()){printjson(array.next());}
迭代迴圈
db.col.find().forEach(printjson)
陣列處理
轉換成陣列
var array = db.col.find()
下標顯示記錄
array[1]
// 或
var array = db.col.find().toArray()
printjson(array[1])
資料庫的鎖狀態
鎖狀態
db.currentOp()
加鎖
db.runCommand({fsync:1,lock:1})
解鎖
db.$cmd.sys.unlock.findOne()
注意
1 一般執行資料庫備份時進行加鎖
2 fsyncLock為1,表示不允許執行寫操作
資料庫的備份、恢復、資料遷移(匯入、匯出)
建立備份目錄
mkdir backupDocument
進入bin目錄
cd bin
備份
備份全部資料庫
./mongodump
備份指定資料庫
./mongodump -d 指定資料庫
備份指定資料庫中的指定集合
./mongodump -d 指定資料庫 -c 指定集合
注意:備份時,需要進入備份資料庫的目錄
恢復
恢復全部資料庫
// drop表示恢復前刪除原來的資料庫資料,避免造成恢復後資料重複
./mongorestore —-drop
恢復指定資料庫
./mongorestore -d 指定資料庫 —drop
恢復指定資料庫的指定集合
./mongorestore -d 指定資料庫 -c 指定集合 —drop
匯入
// 將資料匯入到指定資料庫的指定集合
./mongoimport -d col -c col --file /Users/zhangshaoyu/Desktop/export/personInfo.json --type json
注意:
1 檔案型別type:csv、tsv、json,預設格式json
2 mongoimport —help檢視幫助
匯出
// 將指定資料庫中的指定集合中的資料匯出到指定格式檔案
./mongoexport -d col -c col -o /Users/zhangshaoyu/Desktop/export/personInfo.json --type json -f 'name,age,id'
注意:
1 -q表示指定查詢條件
2 -f表示檔案中的列名
3 mongoexport —help可檢視幫助
遠端管理
遠端連線
mongo -u 使用者名稱 -p 密碼 地址/資料庫
多表聯合處理
示例:模擬使用者發帖,關聯使用者集合userTable、帖子集合postTable的關係。
1 獲取使用者資訊
people = db.person.findOne()
2 發表幀子
db.postCollection.save({'title':'test title 2','name':people.name})
3 獲取帖子資訊
db.postCollection.find({'name':people.name})