當我們從MongoDB網站下載安裝包之后,它會伴隨有一系列的工具,服務器程序mongod是我們耳熟能詳的了,客戶端mongo和性能檢測mongostat我們可能就沒有用過了,今天主要是介紹一下mongo這個客戶端命令行工具的使用。
測試環境:服務端:linux版的mongod 2.6.9
客戶端:window版的mongo 2.6.9
下面介紹一些常用的命令
1 建立一個新的鏈接
var x=new Mongo("192.168.2.4:27017")
2 顯示所有數據庫
show dbs
3 指定當前要使用的數據庫
var db=x.getDB("background")
4 得到當前數據庫的名稱
db.getName()
5 得到數據庫的所有集合
db.getCollectionNames()
6 得到數據庫中集合的詳細信息
db.getCollectionInfos()
7 得到指定的集合
db.getCollection("background")
8 得到集合中元素的數量
db.getCollection("background").count()
9 得到服務器相關信息
db.hostInfo()
10 得到當前Mongo服務器的連接信息
db.getMongo()
11 為排序和查詢的字段添加索引
了解數據庫的朋友對索引應該不會陌生吧,當數據量比較小時,它起不到什么作用,當數據量大時500W以上,你的字段就需要加索引了,性能提升相當的明顯,如果你不加,那你就等著曇花開吧,呵呵!
db.TableName.ensureIndex({FieldName:1})//1為升序,-1為降序 db.TableName.getIndexes()
12 刪除索引
db.TableName.dropIndex({"LoginName":1})
13 查看數據表的狀態,同步顯示分片的狀態和每個片被命中的數量
db.WebManageUsers.stats()
14 查看數據庫的狀態,它會把相關分片的信息顯示出來
db.stats()
15 在路由服務器查詢分片完整的信息
var db=x.getDB("admin"); db.runCommand({listshards:1});//需要在admin數據庫下
16 設置數據庫的分片狀態,讓它生效
#指定databaseName分片生效 db.runCommand( { enablesharding :"databaseName"});
17 設置數據庫下的數據表(Collection)分片狀態,讓它生效
#指定數據庫里需要分片的集合和片鍵 db.runCommand( { shardcollection : "databaseName.tableName",key : {_id: 1} } )
18 對數據表進行分組
db.tableName.aggregate([{ "$group" : { "_id" : "$DepartmentID", "userCount" : { "$sum" : 1 } } }])
19 分組第二種方法group強大命令
db.M_Partner_Footprints.group({ key: function (doc) { PartnerInfoID: true },//分組的key cond: { PartnerInfoID: 6, Login: { ClientType: 0 } },//條件過濾 initial: { "count": 0 }, reduce: function (doc, out) {//聚合方式 out.count += 1; }, finalize: function (out) {//結果處理 return out; } });
20 group對多個字段進行分組,使用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進行聚合操作
db.M_User_Footprints.aggregate([{ $group: { _id: "$UserInfoID", num_tutorial: { $sum: 1 } } }])
23 管道,MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結果傳遞給下一個管道處理。管道操作是可以重復的。
一 $project選擇指定的列,_id被默認選中
db.M_User_Footprints.aggregate( { $project: { UserInfoID: 1, TeacherID: 1, } } );
二 $match選擇某個范圍的數據,并將結果傳到下一個管道中
db.M_User_Footprints.aggregate([ { $match: { UserInfoID: { $gt: 1, $lte: 100 } } }, { $group: { _id: null, count: { $sum: 1 } } } ]);
各位對索引一定要引起重視,因為在大數據情況下,如果沒有索引,在進行排序,查詢等操作時就引發全表掃描,那代價是非常大的!
文章列表