MongoDB學習筆記(ji)~客(ke)戶端命(ming)令行的(de)使用(yong)
當我(wo)們(men)從MongoDB網(wang)站(zhan)下載安裝包之后,它會伴隨有(you)一系列的(de)工具(ju),服務(wu)器程序mongod是我(wo)們(men)耳熟能詳(xiang)的(de)了(le),客戶(hu)端mongo和性能檢(jian)測mongostat我(wo)們(men)可能就沒有(you)用(yong)過了(le),今天主要是介紹一下mongo這個客戶(hu)端命令行工具(ju)的(de)使用(yong)。
測(ce)試環(huan)境(jing):服務端:linux版的mongod 2.6.9
客戶端:window版的mongo 2.6.9
下面介紹一些常用的命令
1 建立一個(ge)新的鏈接
var x=new Mongo("192.168.2.4:27017")
2 顯示所有數據庫
show dbs
3 指定當前要使用的(de)數據庫
var db=x.getDB("background")
4 得到(dao)當前數據庫的(de)名稱
db.getName()
5 得(de)到數據庫(ku)的所有集合
db.getCollectionNames()
6 得到數據庫中集合的(de)詳細信息
db.getCollectionInfos()
7 得到指定的集合
db.getCollection("background")
8 得(de)到集合中元素(su)的數(shu)量
db.getCollection("background").count()
9 得(de)到服務器(qi)相關信息(xi)
db.hostInfo()
10 得到當前Mongo服務器的連(lian)接(jie)信(xin)息
db.getMongo()
11 為排序和查(cha)詢的字段添加索引
了解(jie)數(shu)據庫的(de)朋友(you)對索引應該(gai)不會(hui)陌生吧,當數(shu)據量比較小(xiao)時,它起不到什么(me)作用,當數(shu)據量大時500W以上,你(ni)的(de)字段就需(xu)要加索引了,性能提升相當的(de)明(ming)顯(xian),如(ru)果你(ni)不加,那你(ni)就等著(zhu)曇花開吧,呵呵!
db.TableName.ensureIndex({FieldName:1})//1為升(sheng)序,-1為降序
db.TableName.getIndexes()
12 刪除索引
db.TableName.dropIndex({"LoginName":1})
13 查看數(shu)據表的狀(zhuang)態(tai),同(tong)步顯示分片的狀(zhuang)態(tai)和(he)每(mei)個片被命中的數(shu)量
db.WebManageUsers.stats()
14 查看數據庫的(de)狀態(tai),它會把相關分片的(de)信息顯示出來
db.stats()
15 在路由服務器查(cha)詢分片(pian)完整的信息
var db=x.getDB("admin"); db.runCommand({listshards:1});//需要在admin數(shu)據庫(ku)下
16 設置數據庫的(de)分片狀態,讓它生效
#指定databaseName分片生效 db.runCommand( { enablesharding :"databaseName"});
17 設置數(shu)據庫下的數(shu)據表(Collection)分片狀(zhuang)態,讓它(ta)生效(xiao)
#指(zhi)定數據庫里需要分(fen)片的集合和片鍵 db.runCommand( { shardcollection : "databaseName.tableName",key : {_id: 1} } )
18 對數據表進行分組
db.tableName.aggregate([{ "$group" : { "_id" : "$DepartmentID", "userCount" : { "$sum" : 1 } } }])
19 分組第(di)二種方(fang)法group強大命令(ling)
db.M_Partner_Footprints.group({ key: function (doc) { PartnerInfoID: true },//分組的key cond: { PartnerInfoID: 6, Login: { ClientType: 0 } },//條件過濾 initial: { "count": 0 }, reduce: function (doc, out) {//聚(ju)合方式 out.count += 1; }, finalize: function (out) {//結果處(chu)理(li) return out; } });
20 group對多個(ge)字段進行分組,使用(yong)keyf函數來實現
db.M_User_Footprints.group({ keyf: function (doc) { return { UserInfoID: doc.UserInfoID, TeacherID: doc.TeacherID } }, cond: { UserInfoID: 6, Type: 6 }, initial: { "count": 0 }, reduce: function (doc, out) { out.count += 1; }, finalize: function (out) { return out; } });
22 使用aggregate進行聚合操(cao)作
db.M_User_Footprints.aggregate([{ $group: { _id: "$UserInfoID", num_tutorial: { $sum: 1 } } }])
23 管(guan)道,MongoDB的聚合管(guan)道將MongoDB文檔在一個管(guan)道處(chu)理完畢后將結果傳遞給(gei)下一個管(guan)道處(chu)理。管(guan)道操作是(shi)可(ke)以重(zhong)復的。
一 $project選(xuan)擇指定的列,_id被默認選(xuan)中
db.M_User_Footprints.aggregate( { $project: { UserInfoID: 1, TeacherID: 1, } } );
二 $match選擇某個范(fan)圍的數據(ju),并將結果傳到下(xia)一個管(guan)道中
db.M_User_Footprints.aggregate([ { $match: { UserInfoID: { $gt: 1, $lte: 100 } } }, { $group: { _id: null, count: { $sum: 1 } } } ]);
各位對索引(yin)一定要引(yin)起(qi)重(zhong)視,因為在(zai)大數據情況下(xia),如果沒有索引(yin),在(zai)進行排序(xu),查詢等(deng)操作時就引(yin)發全表掃描,那代(dai)價是非常大的!