中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mongodb 之聚合框架--aggregate

發布時間:2020-05-31 03:34:49 來源:網絡 閱讀:6944 作者:dengwang123 欄目:MongoDB數據庫


Mongodb中的聚合框架

 

1 .Mongodb 中的管道操作符之簡單操作

 

Mongo 中的數據查詢語句db.collection.find({},{})中的第一個大括號是用來控制過濾條件的,

第二個大括號是控制key的顯示的。如果想要對查詢出來的結果集中的字段重命令,求平均值,分組等操作

的時候這個find就實現不了。

 

要想對查詢出來的結果集做進一步處理,mongo提供一種實現的方式,聚合框架(aggreagate) 。

 

下面我們來進一步討論這個aggreagate 怎么使用。。

 

在使用aggregate實現聚合操作之前,我們首先來認識下幾個常用的聚合操作符。

$project::可以對結果集中的鍵 重命令,控制鍵是否顯示,對列進行計算。

$match: 過濾結果集

$group:分組,聚合,求和,平均數,等

$skip: 在顯示結果的時候跳過前幾行

$sort:對即將顯示的結果集排序

$limit:控制結果集的大小

 

(1).$project::可以對結果集中的鍵 重命令,控制鍵是否顯示。如果在操作中,

實例一:

> db.test.find({},{_id:0}).limit(2);

{ "id" : 1, "iname" : "ToneyDeng", "iage" : 21, "iadd" : "ShengZheng", "mark" : "" }

{ "id" : 2, "iname" : "Jack", "iage" : 24, "iadd" : "ShangHai", "mark" : "" }

> db.test.aggregate({$project:{did:"$id",dname:"$iname",dage:"$iage",daddr:"$iadd",_id:0}},{$limit:2});

{

        "result" : [

                {

                        "did" : 1,

                        "dname" : "ToneyDeng",

                        "dage" : 21,

                        "daddr" : "ShengZheng"

                },

                {

                        "did" : 2,

                        "dname" : "Jack",

                        "dage" : 24,

                        "daddr" : "ShangHai"

                }

        ],

        "ok" : 1

}

 

在以上實例中,隱藏了_id,然后將其他所有的key的名字重新設置了下。

這里需要重點注意的是在對key重命令后,如果該key下面有索引,將使查詢無法使用到索引。

所以盡量在查詢后進行重命令。

 

 

(2)$match: 這個函數的功能其實和find({})差不多,主要過濾結果集的。

實例二:

> db.test.find({iage:{$lt:25}},{}).limit(2);

{ "_id" : ObjectId("54c1fe77570ca4579ca978e5"), "id" : 1, "iname" : "ToneyDeng", "iage" : 21, "iadd" : "ShengZheng", "mark" : "" }

{ "_id" : ObjectId("54c1febb570ca4579ca978e6"), "id" : 2, "iname" : "Jack", "iage" : 24, "iadd" : "ShangHai", "mark" : "" }

> db.test.aggregate({$match:{iage:{$lt:25}}},{$limit:2})

{

        "result" : [

                {

                        "_id" : ObjectId("54c1fe77570ca4579ca978e5"),

                        "id" : 1,

                        "iname" : "ToneyDeng",

                        "iage" : 21,

                        "iadd" : "ShengZheng",

                        "mark" : ""

                },

                {

                        "_id" : ObjectId("54c1febb570ca4579ca978e6"),

                        "id" : 2,

                        "iname" : "Jack",

                        "iage" : 24,

                        "iadd" : "ShangHai",

                        "mark" : ""

                }

        ],

        "ok" : 1

}

 

以上兩個查詢的結果集一樣只是展示的方式不一樣而已。

在進行聚合group之前最好執行match,減少數據量,提高工作效率。另外如果過濾的key上有索引,

那么查詢會走索引。

 

 

(3). $group:分組,聚合,求和,平均數,等

實例三:

> db.test.aggregate({$group:{_id:"$iname",ct:{$sum:1},avg:{$avg:"$iage"}}},{$limit:3});

{

        "result" : [

                {

                        "_id" : "Tom",

                        "ct" : 3,

                        "avg" : 25.666666666666668

                },

                {

                        "_id" : "Owen",

                        "ct" : 2,

                        "avg" : 26

                },

                {

                        "_id" : "Smith",

                        "ct" : 1,

                        "avg" : 27

                }

        ],

        "ok" : 1

}

 

 

以上是一個簡單的$group操作,這里需要重點解釋一下幾個字段

_id:分組字段,該字段的值必須為$key ,并且_id是固定的不能隨意改變,該列表示需要的分組的字段,可以為單字段分組,也可以多字段分組(后面演示)

ct:表示總的記錄數,

avg:平均值。

 

 

(4).$skip: 在顯示結果的時候跳過前幾行

實例四:

  > db.test.find({}).sort({id:1});

{ "_id" : ObjectId("54c1fe77570ca4579ca978e5"), "id" : 1, "iname" : "ToneyDeng", "iage" : 21, "iadd" : "ShengZheng", "mark" : "" }

{ "_id" : ObjectId("54c1febb570ca4579ca978e6"), "id" : 2, "iname" : "Jack", "iage" : 24, "iadd" : "ShangHai", "mark" : "" }

{ "_id" : ObjectId("54c1ff22570ca4579ca978e7"), "id" : 3, "iname" : "Smith", "iage" : 27, "iadd" : "ShangHai", "mark" : "" }

{ "_id" : ObjectId("54c1ff36570ca4579ca978e8"), "id" : 4, "iname" : "Owen", "iage" : 27, "iadd" : "BeiJing", "mark" : "" }

{ "_id" : ObjectId("54c1ff44570ca4579ca978e9"), "id" : 5, "iname" : "Owen", "iage" : 25, "iadd" : "BeiJing", "mark" : "" }

{ "_id" : ObjectId("54c1ffc2570ca4579ca978ea"), "id" : 6, "iname" : "Tom", "iage" : 25, "iadd" : "WuHan", "mark" : "" }

{ "_id" : ObjectId("54c1ffd3570ca4579ca978eb"), "id" : 7, "iname" : "Tom", "iage" : 25, "iadd" : "BeiJing", "mark" : "" }

{ "_id" : ObjectId("54c2005e570ca4579ca978ec"), "id" : 8, "iname" : "Tom", "iage" : 27, "iadd" : "GuangZhou", "mark" : "nihao" }

{ "_id" : ObjectId("54c20076570ca4579ca978ed"), "id" : 9, "iname" : "Jack", "iage" : 23, "iadd" : "GuangZhou", "mark" : "Yahoo" }

> db.test.aggregate({$sort:{id:1}},{$skip:6});

{

        "result" : [

                {

                        "_id" : ObjectId("54c1ffd3570ca4579ca978eb"),

                        "id" : 7,

                        "iname" : "Tom",

                        "iage" : 25,

                        "iadd" : "BeiJing",

                        "mark" : ""

                },

                {

                        "_id" : ObjectId("54c2005e570ca4579ca978ec"),

                        "id" : 8,

                        "iname" : "Tom",

                        "iage" : 27,

                        "iadd" : "GuangZhou",

                        "mark" : "nihao"

                },

                {

                        "_id" : ObjectId("54c20076570ca4579ca978ed"),

                        "id" : 9,

                        "iname" : "Jack",

                        "iage" : 23,

                        "iadd" : "GuangZhou",

                        "mark" : "Yahoo"

                }

        ],

        "ok" : 1

}

 

通過上面的兩個結果集的對比可以發現結果二成功跳過了前6行。

 

(5)$sort:對即將顯示的結果集排序   ,   $limit:控制結果集的大小

 關于這兩個管道操作符的的使用方法比較簡單,在實例四和實例三中有使用到。

 

2.Mongodb 中的管道操作符之復雜操作,

 

實例五:分組后,重命名字段。

> db.test.aggregate({$group:{_id:"$iname",count:{$sum:1},avg:{$avg:"$iage"}}},{$project:{id:"$_id",ct:"$count",ag:"$avg",_id:0}})

{

        "result" : [

                {

                        "id" : "Tom",

                        "ct" : 3,

                        "ag" : 25.666666666666668

                },

                {

                        "id" : "Owen",

                        "ct" : 2,

                        "ag" : 26

                },

                {

                        "id" : "Smith",

                        "ct" : 1,

                        "ag" : 27

                },

                {

                        "id" : "Jack",

                        "ct" : 2,

                        "ag" : 23.5

                },

                {

                        "id" : "ToneyDeng",

                        "ct" : 1,

                        "ag" : 21

                }

        ],

        "ok" : 1

}

  

 

實例六:重命名字段再分組。

> db.test.aggregate({$project:{_id:0,aid:"$id",aname:"$iname",age:"$iage"}},{$group:{_id:"$aname",ct:{$sum:1},ag:{$avg:"$age"}}});

{

        "result" : [

                {

                        "_id" : "Tom",

                        "ct" : 3,

                        "ag" : 25.666666666666668

                },

                {

                        "_id" : "Owen",

                        "ct" : 2,

                        "ag" : 26

                },

                {

                        "_id" : "Smith",

                        "ct" : 1,

                        "ag" : 27

                },

                {

                        "_id" : "Jack",

                        "ct" : 2,

                        "ag" : 23.5

                },

                {

                        "_id" : "ToneyDeng",

                        "ct" : 1,

                        "ag" : 21

                }

        ],

        "ok" : 1

}

 

 

實例七:過濾再分組.

> db.test.aggregate({$match:{id:{$lt:6}}},{$group:{_id:"$iname",ct:{$sum:1},ag:{$avg:"$iage"}}});

{

        "result" : [

                {

                        "_id" : "Owen",

                        "ct" : 2,

                        "ag" : 26

                },

                {

                        "_id" : "Smith",

                        "ct" : 1,

                        "ag" : 27

                },

                {

                        "_id" : "Jack",

                        "ct" : 1,

                        "ag" : 24

                },

                {

                        "_id" : "ToneyDeng",

                        "ct" : 1,

                        "ag" : 21

                }

        ],

        "ok" : 1

}

 

 

實例八:分組再過濾

> db.test.aggregate({$group:{_id:"$iname",ct:{$sum:1},ag:{$avg:"$iage"}}},{$match:{ct:{$lte:2}}});

{

        "result" : [

                {

                        "_id" : "Owen",

                        "ct" : 2,

                        "ag" : 26

                },

                {

                        "_id" : "Smith",

                        "ct" : 1,

                        "ag" : 27

                },

                {

                        "_id" : "Jack",

                        "ct" : 2,

                        "ag" : 23.5

                },

                {

                        "_id" : "ToneyDeng",

                        "ct" : 1,

                        "ag" : 21

                }

        ],

        "ok" : 1

}

 

 

總結這幾個聚合操作符之間沒有嚴格的使用順序,只要按照一定的規則搭配使用,一般的聚合都可以實現。

 

 

問題一:在聚合框架中,如何統計結果集的總數。

問題二:在聚合框架中,如何查看執行計劃,

 

 

 

3.Mongodb 中的管道表達式之常用表達式。

  

管道表達式

project:部分

#數學表達式

$add:一個或多個表達式相加

$subtract:接收兩個表達式,返回兩表達式的之差

$multiply:接收一個或多個表達式,返回它們相乘的結果集

$divide:接收兩個表達式,返回第一個除以第二個表達式的商

$mod:接收兩個表達式,返回第一個表達式除以第二個表達式的余數(模型)

 

#日期表達式

$year:年份

$month:月份

$week:一年中的第幾周

$dayOfMonth:本月的第幾天

$dayOfWeek:一個星期的第幾天

$dayOfYear:一年中的第幾天

$hour:獲取小時部分

$minute:取得分鐘數

$second:取得秒數

 

#字符串表達式

$substr:字符串截取函數,相當于mysqlsubstr

$concat:字符串連接函數

$toLower:將字符串值變為小寫

$toUpper:將字符串值變為大寫

 

 

 

#邏輯表達式

$cpm:接收兩個表達式[exp1,exp2],如果exp1<exp2,就返回-1,如果exp1=exp2,就返回1,如果exp1>exp2就返回1

$cond:[bool,exp1,exp2],如果booltrue就返回exp1,否則返回exp2

$ifnull:[exp1,exp2],如果exp1null,就返回exp2

$strcasecmp:比較兩個字符串的大小

$eq/$ne/$gt/$gte/$lt/$lte:以此為(等于/不等于/大于/大于或等于/小于/小于或等于)

$and:并且

$or:

$not:

$in:相當于mysql中 in

$ne:不等于。

$exists:列是存在。

 

#數學表達式

(1)$add:一個或多個表達式相加

  > db.test.aggregate({$project:{iage:{$add:["$iage",1]},_id:0}},{$limit:3});

{

        "result" : [

                {

                        "iage" : 22

                },

                {

                        "iage" : 25

                },

                {

                        "iage" : 28

                }

        ],

        "ok" : 1

}

 

(2).$subtract:接收兩個表達式,返回兩表達式的之差

> db.test.aggregate({$project:{iage:{$add:["$iage",1]},subtr:{$subtract:["$iage",20]},_id:0}},{$limit:3});

{

        "result" : [

                {

                        "iage" : 22,

                        "subtr" : 1

                },

                {

                        "iage" : 25,

                        "subtr" : 4

                },

                {

                        "iage" : 28,

                        "subtr" : 7

                }

        ],

        "ok" : 1

}

 

(3).$multiply:接收一個或多個表達式,返回它們相乘的結果集

> db.test.aggregate({$project:{multi:{$multiply:["$iage",2]},_id:0}},{$limit:3});

{

        "result" : [

                {

                        "multi" : 42

                },

                {

                        "multi" : 48

                },

                {

                        "multi" : 54

                }

        ],

        "ok" : 1

}

 

4.$divide:接收兩個表達式,返回第一個除以第二個表達式的商

> db.test.aggregate({$project:{divide:{$divide:["$iage",11]},_id:0}},{$limit:3});

{

        "result" : [

                {

                        "divide" : 1.9090909090909092

                },

                {

                        "divide" : 2.1818181818181817

                },

                {

                        "divide" : 2.4545454545454546

                }

        ],

        "ok" : 1

}


(5).$mod:接收兩個表達式,返回第一個表達式除以第二個表達式的余數(模型)

> db.test.aggregate({$project:{iage:1,mod:{$mod:["$iage",20]},_id:0}},{$limit:3});

{

        "result" : [

                {

                        "iage" : 21,

                        "mod" : 1

                },

                {

                        "iage" : 24,

                        "mod" : 4

                },

                {

                        "iage" : 27,

                        "mod" : 7

                }

        ],

        "ok" : 1

}

這個表達式很特別,可以在find,match中使用但是好像是有點問題.

 

> db.test.find({id:{$mod:[21,4]}}).limit(3);

{ "_id" : ObjectId("54c1ff36570ca4579ca978e8"), "id" : 4, "iname" : "Owen", "iage" : 27, "iadd" : "BeiJing", "mark" : "" }

> db.test.find({id:{$mod:[7,4]}}).limit(3);

{ "_id" : ObjectId("54c1ff36570ca4579ca978e8"), "id" : 4, "iname" : "Owen", "iage" : 27, "iadd" : "BeiJing", "mark" : "" }

 

以上兩個查詢中,在正常情況下,查詢出來的id應為,1,3 不應該為4,

 

(6).#日期表達式部分.

 $year:年份

$month:月份

$week:一年中的第幾周

$dayOfMonth:本月的第幾天

$dayOfWeek:一個星期的第幾天

$dayOfYear:一年中的第幾天

$hour:獲取小時部分

$minute:取得分鐘數

$second:取得秒數

用法很單一,這里就用$year為例。

> db.test.aggregate({$project:{_id:0,iname:1,year:{$year:[new Date()]}}},{$limit:2});

{

        "result" : [

                {

                        "iname" : "ToneyDeng",

                        "year" : 2015

                },

                {

                        "iname" : "Jack",

                        "year" : 2015

                }

        ],

        "ok" : 1

}

 

(7).#字符串表達式

$substr:字符串截取函數,相當于mysqlsubstr

> db.test.aggregate({$project:{_id:0,id:1,iname:1,substr:{$substr:["$iname",0,4]}}},{$limit:2});

{

        "result" : [

                {

                        "id" : 1,

                        "iname" : "ToneyDeng",

                        "substr" : "Tone"

                },

                {

                        "id" : 2,

                        "iname" : "Jack",

                        "substr" : "Jack"

                }

        ],

        "ok" : 1

}

 

 

(8).$concat:字符串連接函數

> db.test.aggregate({$project:{_id:0,id:1,iname:1,iadd:1,concat:{$concat:["$iname","  ","$iadd"]}}},{$limit:2});

{

        "result" : [

                {

                        "id" : 1,

                        "iname" : "ToneyDeng",

                        "iadd" : "ShengZheng",

                        "concat" : "ToneyDeng  ShengZheng"

                },

                {

                        "id" : 2,

                        "iname" : "Jack",

                        "iadd" : "ShangHai",

                        "concat" : "Jack  ShangHai"

                }

        ],

        "ok" : 1

}

 

(9).$toLower:將字符串值變為小寫  ,$toUpper:將字符串值變為大寫

$toLower$toUpper的使用方法一樣,

> db.test.aggregate({$project:{_id:0,iname:1,toLower:{$toLower:["$iname"]}}},{$limit:2});

{

        "result" : [

                {

                        "iname" : "ToneyDeng",

                        "toLower" : "toneydeng"

                },

                {

                        "iname" : "Jack",

                        "toLower" : "jack"

                }

        ],

        "ok" : 1

}

 

 

(10)#邏輯表達式

$cpm:接收兩個表達式[exp1,exp2],如果exp1<exp2,就返回-1,如果exp1=exp2,就返回1,如果exp1>exp2就返回

> db.test.aggregate({$project:{_id:0,iname:1,iadd:1,cmp:{$cmp:["$iname","$iadd"]}}},{$limit:2});

{

        "result" : [

                {

                        "iname" : "ToneyDeng",

                        "iadd" : "ShengZheng",

                        "cmp" : 1

                },

                {

                        "iname" : "Jack",

                        "iadd" : "ShangHai",

                        "cmp" : -1

                }

        ],

        "ok" : 1

}

 

(11).$strcasecmp:比較兩個字符串的大小(這個具體還不知道是怎么回事!,不過語法沒有問題。)

> db.test.aggregate({$project:{_id:0,iname:1,iadd:1,strcasecmp:{$strcasecmp:["w","w"]}}},{$limit:2});

{

        "result" : [

                {

                        "iname" : "ToneyDeng",

                        "iadd" : "ShengZheng",

                        "strcasecmp" : 0

                },

                {

                        "iname" : "Jack",

                        "iadd" : "ShangHai",

                        "strcasecmp" : 0

                }

        ],

        "ok" : 1

}

 

(12).$cond:[bool,exp1,exp2],如果booltrue就返回exp1,否則返回exp2

> db.test.aggregate({$project:{_id:0,iname:1, con:{$cond:[false,"$iage","$iadd"]}}},{$limit:2});

{

        "result" : [

                {

                        "iname" : "ToneyDeng",

                        "con" : "ShengZheng"

                },

                {

                        "iname" : "Jack",

                        "con" : "ShangHai"

                }

        ],

        "ok" : 1

}

  

 

(14) 運算表達式,這幾個表達式可以在findmatch中用來過濾文檔數量

$eq/$ne/$gt/$gte/$lt/$lte:以此為(等于/不等于/大于/大于或等于/小于/小于或等于)

$and:并且

$or:

$not:

$in:相當于mysql中 in

$exists:某個鍵是否存在。

相當于 select * from tableName where iname <>ToneyDeng and  iage<25

> db.test.aggregate({$match:{$and:[{iname:{$ne:"ToneyDeng"}},{iage:{$lt:25}}]}});

{

        "result" : [

                {

                        "_id" : ObjectId("54c1febb570ca4579ca978e6"),

                        "id" : 2,

                        "iname" : "Jack",

                        "iage" : 24,

                        "iadd" : "ShangHai",

                        "mark" : ""

                },

                {

                        "_id" : ObjectId("54c20076570ca4579ca978ed"),

                        "id" : 9,

                        "iname" : "Jack",

                        "iage" : 23,

                        "iadd" : "GuangZhou",

                        "mark" : "Yahoo"

                }

        ],

        "ok" : 1

}


相當于:select * from  tableName  where id not in (1,3,5,6,7,8)  or  iname<>ToneyDeng and iage<25

> db.test.aggregate({$match: {$or:[{id:{$not:{$in:[1,3,5,6,7,8]}}}  ,{$and:[{iname:{$ne:"ToneyDeng"}},{iage:{$lt:25}}]}]}});

{

        "result" : [

                {

                        "_id" : ObjectId("54c1febb570ca4579ca978e6"),

                        "id" : 2,

                        "iname" : "Jack",

                        "iage" : 24,

                        "iadd" : "ShangHai",

                        "mark" : ""

                },

                {

                        "_id" : ObjectId("54c1ff36570ca4579ca978e8"),

                        "id" : 4,

                        "iname" : "Owen",

                        "iage" : 27,

                        "iadd" : "BeiJing",

                        "mark" : ""

                },

                {

                        "_id" : ObjectId("54c20076570ca4579ca978ed"),

                        "id" : 9,

                        "iname" : "Jack",

                        "iage" : 23,

                        "iadd" : "GuangZhou",

                        "mark" : "Yahoo"

                }

        ],

        "ok" : 1

}

 

iname  是否存在

> db.test.aggregate({$match:{iname:{$exists:true}}},{$limit:2});

{

        "result" : [

                {

                        "_id" : ObjectId("54c1fe77570ca4579ca978e5"),

                        "id" : 1,

                        "iname" : "ToneyDeng",

                        "iage" : 21,

                        "iadd" : "ShengZheng",

                        "mark" : ""

                },

                {

                        "_id" : ObjectId("54c1febb570ca4579ca978e6"),

                        "id" : 2,

                        "iname" : "Jack",

                        "iage" : 24,

                        "iadd" : "ShangHai",

                        "mark" : ""

                }

        ],

        "ok" : 1

}

 

 

 

(15).group:聚合操作符

#算術操作符

$sum:求和

$avg:平均數

$max:最大值

$min:最小值

$first:第一個值

$last:最后一個值

> db.test.aggregate({$group:{_id:"$iname",count:{$sum:1},sum:{$sum:"$iage"},avg:{$avg:"$iage"},max:{$max:"$iage"},min:{$min:"$iage"}}},{$limit:2});

{

        "result" : [

                {

                        "_id" : "Tom",

                        "count" : 3,

                        "sum" : 77,

                        "avg" : 25.666666666666668,

                        "max" : 27,

                        "min" : 25

                },

                {

                        "_id" : "Owen",

                        "count" : 2,

                        "sum" : 52,

                        "avg" : 26,

                        "max" : 27,

                        "min" : 25

                }

        ],

        "ok" : 1

}

 

 

得到分組中的第一個值和最后一個值

> db.test.aggregate({$group:{_id:"$iname",ct:{$sum:1},first:{$first:"$iage"},min:{$min:"$iage"},last:{$last:"$iage"}}},{$limit:2});

{

        "result" : [

                {

                        "_id" : "Tom",

                        "ct" : 3,

                        "first" : 25,

                        "min" : 25,

                        "last" : 27

                },

                {

                        "_id" : "Owen",

                        "ct" : 2,

                        "first" : 27,

                        "min" : 25,

                        "last" : 25

                }

        ],

        "ok" : 1

}

 



4.#數組操作符

$addTOSet:expx ,如果當前數組中不包含expx就把它添加到數組中。

$push:expx,不管expx是什么值,都expx 都添加到數組中。


5.mongo聚合操作操作還可以通過以下方式實現,

不過似乎是要寫js腳本,這個就有點復雜了。

MapReduce

db.runCommand():執行數據庫命令


參考鏈接:

http://www.cnblogs.com/shanyou/p/3494854.html

 

  


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北流市| 十堰市| 皮山县| 六枝特区| 南木林县| 耿马| 佛坪县| 定结县| 来凤县| 永安市| 太原市| 聂拉木县| 龙山县| 航空| 宜章县| 阿克陶县| 南康市| 固始县| 花莲市| 怀仁县| 扶沟县| 溆浦县| 通渭县| 定西市| 怀柔区| 房产| 赞皇县| 青河县| 汉中市| 旬邑县| 那曲县| 莱芜市| 阿巴嘎旗| 哈尔滨市| 土默特右旗| 娄烦县| 苍梧县| 鲁山县| 通辽市| 蒙自县| 乌海市|