文章出處

回到目錄

當我們從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 } } }
]);

各位對索引一定要引起重視,因為在大數據情況下,如果沒有索引,在進行排序,查詢等操作時就引發全表掃描,那代價是非常大的!

回到目錄


文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()