MongoDB中怎么實(shí)現(xiàn)管道操作符

MongoDB中怎么實(shí)現(xiàn)管道操作符,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

在未央等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營(yíng)銷型網(wǎng)站,外貿(mào)網(wǎng)站制作,未央網(wǎng)站建設(shè)費(fèi)用合理。

$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ì)文檔的拆分,可以將文檔中的值拆分為單獨(dú)的文檔,比如我的數(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的效率低,要慎用。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

本文標(biāo)題:MongoDB中怎么實(shí)現(xiàn)管道操作符
文章地址:http://bm7419.com/article38/jdsipp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)電子商務(wù)、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、全網(wǎng)營(yíng)銷推廣網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化