成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

MongoDB管道操作符(二)

張率功 / 2091人閱讀

摘要:上篇文章中我們已經(jīng)學(xué)習(xí)了中幾個(gè)基本的管道操作符,本文我們?cè)賮?lái)看看其他的管道操作符。算術(shù)操作符通過(guò)算術(shù)操作符我們可以對(duì)分組后的文檔進(jìn)行求和或者求平均數(shù)。好了,中的管道操作符我們就先說(shuō)到這里,小伙伴們有問題歡迎留言討論。

上篇文章中我們已經(jīng)學(xué)習(xí)了MongoDB中幾個(gè)基本的管道操作符,本文我們?cè)賮?lái)看看其他的管道操作符。

本文是MongoDB系列的第十三篇文章,了解前面的文章有助于更好的理解本文:


1.Linux上安裝MongoDB
2.MongoDB基本操作
3.MongoDB數(shù)據(jù)類型
4.MongoDB文檔更新操作
5.MongoDB文檔查詢操作(一)
6.MongoDB文檔查詢操作(二)
7.MongoDB文檔查詢操作(三)
8.MongoDB查看執(zhí)行計(jì)劃
9.初識(shí)MongoDB中的索引
10.MongoDB中各種類型的索引
11.MongoDB固定集合
12.MongoDB管道操作符(一)


$group 基本操作

$group可以用來(lái)對(duì)文檔進(jìn)行分組,比如我想將訂單按照城市進(jìn)行分組,并統(tǒng)計(jì)出每個(gè)城市的訂單數(shù)量:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",count:{$sum:1}}})

我們將要分組的字段傳遞給$group函數(shù)的_id字段,然后每當(dāng)查到一個(gè),就給count加1,這樣就可以統(tǒng)計(jì)出每個(gè)城市的訂單數(shù)量。

算術(shù)操作符

通過(guò)算術(shù)操作符我們可以對(duì)分組后的文檔進(jìn)行求和或者求平均數(shù)。比如我想計(jì)算每個(gè)城市訂單運(yùn)費(fèi)總和,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",totalFreight:{$sum:"$freight"}}})

先按地址分組,再求和。這里貼出部分查詢結(jié)果,如下:

{
    "_id" : "HaiKou",
    "totalFreight" : 20.0
}
{
    "_id" : "HangZhou",
    "totalFreight" : 10.0
}

也可以計(jì)算每個(gè)城市運(yùn)費(fèi)的平均數(shù),如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",avgFreight:{$avg:"$freight"}}})

先按地址分組,然后再計(jì)算平均數(shù)。

極值操作符

極值操作符用來(lái)獲取分組后數(shù)據(jù)集的邊緣值,比如獲取每個(gè)城市最貴的運(yùn)費(fèi),如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",maxFreight:{$max:"$freight"}}})

查詢每個(gè)城市最便宜的運(yùn)費(fèi):

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",minFreight:{$min:"$freight"}}})

按城市分組之后,獲取該城市第一個(gè)運(yùn)費(fèi)單:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",firstFreight:{$first:"$freight"}}})

獲取分組后的最后一個(gè)運(yùn)費(fèi)單:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",lastFreight:{$last:"$freight"}}})
數(shù)據(jù)操作符

$addToSet可以將分組后的某一個(gè)字段放到一個(gè)數(shù)組中,但是重復(fù)的元素將只出現(xiàn)一次,而且元素加入到數(shù)組中的順序是無(wú)規(guī)律的,比如將分組后的每個(gè)城市的運(yùn)費(fèi)放到一個(gè)數(shù)組中,如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",freights:{$addToSet:"$freight"}}})

重復(fù)的freight將不會(huì)被添加進(jìn)來(lái)。

$push則對(duì)重復(fù)的數(shù)據(jù)不做限制,都可以添加進(jìn)來(lái),如下:

db.sang_collect.aggregate({$group:{_id:"$orderAddressL",freights:{$push:"$freight"}}})
$unwind

$unwind用來(lái)實(shí)現(xiàn)對(duì)文檔的拆分,可以將文檔中的值拆分為多帶帶的文檔,比如我的數(shù)據(jù)如下:

{
    "_id" : ObjectId("59f93c8b8523cfae4cf4ba86"),
    "name" : "魯迅",
    "books" : [ 
        {
            "name" : "吶喊",
            "publisher" : "花城出版社"
        }, 
        {
            "name" : "彷徨",
            "publisher" : "南海出版出"
        }
    ]
}

使用$unwind命令將其拆分為獨(dú)立文檔,如下:

db.sang_books.aggregate({$unwind:"$books"})

拆分結(jié)果如下:

{
    "_id" : ObjectId("59f93c8b8523cfae4cf4ba86"),
    "name" : "魯迅",
    "books" : {
        "name" : "吶喊",
        "publisher" : "花城出版社"
    }
}
{
    "_id" : ObjectId("59f93c8b8523cfae4cf4ba86"),
    "name" : "魯迅",
    "books" : {
        "name" : "彷徨",
        "publisher" : "南海出版出"
    }
}
其他操作符

$sort操作可以對(duì)文檔進(jìn)行排序,如下:

db.sang_collect.aggregate({$sort:{orderAddressL:1}})

用法和我們之前介紹普通搜索中的一致,可以按照存在的字段排序,也可以按照重命名的字段排序,如下:

db.sang_collect.aggregate({$project:{oa:"$orderAddressL"}},{$sort:{oa:-1}})

1表示升序、-1表示降序。

$limit返回結(jié)果中的前n個(gè)文檔,如下表示返回結(jié)果中的前三個(gè)文檔:

db.sang_collect.aggregate({$project:{oa:"$orderAddressL"}},{$limit:3})

$skip表示跳過(guò)前n個(gè)文檔,比如跳過(guò)前5個(gè)文檔,如下:

db.sang_collect.aggregate({$project:{oa:"$orderAddressL"}},{$skip:5})

$skip的效率低,要慎用。

總結(jié)

在管道開始執(zhí)行的階段盡可能過(guò)濾掉足夠多的數(shù)據(jù),這樣做有兩個(gè)好處:1.只有從集合中直接查詢時(shí)才會(huì)使用索引,盡早執(zhí)行過(guò)濾可以讓索引發(fā)揮作用;2.該過(guò)濾的數(shù)據(jù)過(guò)濾掉之后,也可以降低后面管道的執(zhí)行壓力。另外,MongoDB不允許一個(gè)聚合操作占用過(guò)多的內(nèi)存,如果有一個(gè)聚合操作占用了超過(guò)20%的內(nèi)存,則會(huì)直接報(bào)錯(cuò)。

好了,MongoDB中的管道操作符我們就先說(shuō)到這里,小伙伴們有問題歡迎留言討論。

參考資料:

1.《MongoDB權(quán)威指南第2版》

更多資料請(qǐng)關(guān)注公眾號(hào):

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/19154.html

相關(guān)文章

  • mongoDB查詢進(jìn)階】聚合管道(四) -- 累加器(Accumulators)

    摘要:累加器累加器本來(lái)只能使用與下,但是版本或以上,部分累加器還能使用于。當(dāng)在中使用時(shí),累加器是針對(duì)每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對(duì)每個(gè)字面量起作用。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧mongoDB查詢進(jìn)階--聚合管道(三)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(Stage Oper...

    tomato 評(píng)論0 收藏0
  • mongoDB查詢進(jìn)階】聚合管道(四) -- 累加器(Accumulators)

    摘要:累加器累加器本來(lái)只能使用與下,但是版本或以上,部分累加器還能使用于。當(dāng)在中使用時(shí),累加器是針對(duì)每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對(duì)每個(gè)字面量起作用。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧mongoDB查詢進(jìn)階--聚合管道(三)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(Stage Oper...

    wmui 評(píng)論0 收藏0
  • mongoDB查詢進(jìn)階】聚合管道() -- 階段作符

    摘要:當(dāng)在中使用時(shí),累加器是針對(duì)每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對(duì)每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會(huì)更加的多樣化。 上篇最后說(shuō)到管道操作符,本篇文章將詳細(xì)說(shuō)一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...

    brianway 評(píng)論0 收藏0
  • mongoDB查詢進(jìn)階】聚合管道() -- 階段作符

    摘要:當(dāng)在中使用時(shí),累加器是針對(duì)每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對(duì)每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會(huì)更加的多樣化。 上篇最后說(shuō)到管道操作符,本篇文章將詳細(xì)說(shuō)一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...

    flybywind 評(píng)論0 收藏0
  • 手把手教你 MongoDB 的安裝與詳細(xì)使用(

    摘要:實(shí)例教程是一個(gè)數(shù)據(jù)庫(kù)搜云庫(kù)教程專注于開發(fā)技術(shù)的研究與知識(shí)分享方法中你也可以設(shè)置使用多個(gè)字段創(chuàng)建索引關(guān)系型數(shù)據(jù)庫(kù)中稱作復(fù)合索引。 上一篇文章練習(xí)了,MongoDB 的以下操作 安裝 MongoDB 服務(wù) 連接 MongoDB MongoDB 創(chuàng)建數(shù)據(jù)庫(kù) MongoDB 刪除數(shù)據(jù)庫(kù) MongoDB 插入文檔 MongoDB 刪除文檔 MongoDB 查詢文檔 MongoDB AND 條件...

    jayzou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<