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

溫馨提示×

溫馨提示×

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

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

MongoDB中怎么實現管道操作符

發布時間:2021-07-27 15:59:36 來源:億速云 閱讀:153 作者:Leah 欄目:大數據

MongoDB中怎么實現管道操作符,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

$group

基本操作

$group可以用來對文檔進行分組,比如我想將訂單按照城市進行分組,并統計出每個城市的訂單數量:

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

我們將要分組的字段傳遞給$group函數的_id字段,然后每當查到一個,就給count加1,這樣就可以統計出每個城市的訂單數量。

算術操作符

通過算術操作符我們可以對分組后的文檔進行求和或者求平均數。比如我想計算每個城市訂單運費總和,如下:

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

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

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

也可以計算每個城市運費的平均數,如下:

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

先按地址分組,然后再計算平均數。

極值操作符

極值操作符用來獲取分組后數據集的邊緣值,比如獲取每個城市最貴的運費,如下:

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

查詢每個城市最便宜的運費:

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

按城市分組之后,獲取該城市第一個運費單:

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

獲取分組后的最后一個運費單:

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

數據操作符

$addToSet可以將分組后的某一個字段放到一個數組中,但是重復的元素將只出現一次,而且元素加入到數組中的順序是無規律的,比如將分組后的每個城市的運費放到一個數組中,如下:

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

重復的freight將不會被添加進來。

$push則對重復的數據不做限制,都可以添加進來,如下:

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

$unwind

$unwind用來實現對文檔的拆分,可以將文檔中的值拆分為單獨的文檔,比如我的數據如下:

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

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

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

拆分結果如下:

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

其他操作符

$sort操作可以對文檔進行排序,如下:

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

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

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

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

$limit返回結果中的前n個文檔,如下表示返回結果中的前三個文檔:

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

$skip表示跳過前n個文檔,比如跳過前5個文檔,如下:

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

$skip的效率低,要慎用。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

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

AI

特克斯县| 扬中市| 合肥市| 神木县| 永和县| 松溪县| 墨脱县| 年辖:市辖区| 杭锦旗| 名山县| 马龙县| 电白县| 湘阴县| 金湖县| 微博| 阳春市| 龙岩市| 兴安盟| 永兴县| 姜堰市| 安宁市| 永安市| 四川省| 高淳县| 民权县| 乐至县| 衡水市| 和林格尔县| 荥经县| 叶城县| 太仆寺旗| 长乐市| 溧阳市| 错那县| 湖州市| 炉霍县| 秦安县| 万载县| 靖安县| 南充市| 台南市|