摘要:基本說明作用對的進行運算,篩選,截取,排序操作語法是要執行的聚合說明格式類型或包含多個的列表或,會順序執行列表里面的操作語法操作符操作提供了非常多的操作符,這里只選取常用的幾個進行說明常用操作重命名及增加,刪除字段例子保留字段不要字段常用以
基本說明 作用
對mongodb的collection進行運算,篩選,截取,排序操作
語法db.collection.aggregate(pipeline)
pipeline是要執行的聚合說明
pipeline 格式dict類型或包含多個dict的列表:{} 或 [{},…,{}],mongodb會順序執行列表里面的操作
pipeline 語法:{$操作符:{操作}}
mongodb提供了非常多的操作符,這里只選取常用的幾個進行說明
重命名及增加,刪除字段
例子:
db.collection.aggregate({"$project": { key1:1, // 保留key1字段 key2:0, //不要key2字段(常用以去掉"_id",因為"_id"會默認被包含) keyalias:"$key3"http://將key3字段重命名為keyalias }}$match
過濾篩選操作
match語法和db.collection.find()語法相同
現在數據條數
如: db.collection.aggregate({$limit:5}) : 只返回最多5條數據
從數據集合開始跳過n條數據
語法和$limit 一樣,n為正整數
將數組元素拆分成獨立字段
語法{$unwind:"$字段名"},該字段的值必需是數組
例子:
假設collection 原版的數據是:
{_id:xxxxxxx, key1: [ {subk1: value, subk2: value }, {subk3: value, subk2: value }], key2: value, key3: value }
通過db.collection.aggregate({$unwind:"$key1"})后:
{result:[ { _id: xxxxxxx, key1: {subk1: value, subk2: value}, key2: value, key3:value }, { _id: xxxxxxx key1: {subk3: value, subk2: value}, key3: value } ] }$group
根據指定字段值進行分組,可以包含算數類型的表達式操作符
例子:
假設collection數據為
[{ _id: xxxxxxx, key1: v1, key2: 2, }, { _id: xxxxxxxx, key1: v2, key2: 5 }, { _id: xxxxxxx, key1: v1, key2: 7 }, ] db.collection.aggregate({$group:{_id:"$key1", key2sum:{$sum :"$key2"}}})
結果為:
{result:[ {key1: v1, key2sum: 9}, {key1: v2, key2sum: 5} ] }$sort
對結果進行排序**,語法和db.collection.find().sort()語法一致
{$sort:{key1: -1, key2:1}}: key1值降序,key2值升序
pipeline = {$match:{ts:{$gte: 100000, $lt:120000}}}
篩選出ts在[100000, 120000] 之間的數據
去掉值為null的數據pipeline = {$match:{key1:"$ne":null}}
去掉key1為null的數據
多個操作組合示例pipeline = [{"$project":{"minu": 1, "_id": 0, "t": 1, "r": 1}}, {"$unwind": "$minu"}, {"$match": {"minu": {"$ne": None}}}, {"$project": {"r": 1, "trans_count": "$minu.k", "ts": {"$add": ["$t", "$minu.t"]}}}, {"$match": {"ts": {"$gte": 1457059140, "$lt": 1457060040}}}, {"$project": {"trans_count": 1, "id": 0, "r": 1}}, {"$group": {"trans_count": {"$sum": "$trans_count"}, "id": "$r"}}, {"$project": {"trans_count": 1, "id": 0, "ret_code": "$id"}}, {"$sort": {"trans_count": -1, "ret_code": 1}}]
mongodb會順序執行以下內容:
獲取minu, t, r 字段的內容, 去掉_id字段
分解minu的數據
去掉minu字段為null的數據
將保留r字段, minu.k重命名為trans_count, ts為t和minu.t的和
獲取ts在[1457059140, 1457060040]之間的數據
獲取trans_count, r 字段
按照r字段的值分組,同一個r值得trans_count相加(id的值是r字段的內容)
保留trans_count字段,_id重命名為ret_code
根據trans_count降序,ret_code升序排列
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/18820.html
摘要:小結是聚合管道查詢使用的方法,參數是數組,每個數組元素就是一個,中運用操作符對數據進行處理后再交由下一個,直到沒有下個,就輸出最終的結果,而數據的處理則是通過使用操作符,本文先簡單介紹了一下有哪些常用的操作符,下一篇再詳細說明。 前言:一般查詢可以通過find方法,但如果是比較復雜的查詢或者數據統計的話,find可能就無能為力了,這時也許你需要的是aggregate. 什么是聚合管道(...
摘要:一前言因公司需要選用做全文檢索,持久化存儲選用的是,但是希望里面的數據發生改變可以實時同步到上,一開始主要使用的版本,可以搞定這個問題。或者修改中的某一條數據,也會實時同步到中。如何把的主文檔和附件信息都同步到中利用的來實現。 一、前言 因公司需要選用elasticsearch做全文檢索,持久化存儲選用的是mongodb,但是希望mongodb里面的數據發生改變可以實時同步到elast...
摘要:最近真是忙的吐血。。。上篇寫的是直接在爬蟲中使用,這樣不是很好,下使用才是正經方法。 最近真是忙的吐血。。。 上篇寫的是直接在爬蟲中使用mongodb,這樣不是很好,scrapy下使用item才是正經方法。在item中定義需要保存的內容,然后在pipeline處理item,爬蟲流程就成了這樣: 抓取 --> 按item規則收集需要數據 -->使用pipeline處理(存儲等) 定義it...
摘要:環境使用可以實現較為復雜的數據聚合操作,例如匯總去重匯總分組統計等。返回結果為數組,需要注意數據大小不能超過。的返回結果為游標,可循環取數。 環境mongos 3.0.14 aggregate 使用 aggregate 可以實現較為復雜的數據聚合操作,例如 匯總(count)、去重匯總(distinct count)、分組統計(group having)等。 aggregate 返回結...
閱讀 3684·2021-08-10 09:42
閱讀 584·2019-08-30 15:55
閱讀 880·2019-08-30 15:54
閱讀 3104·2019-08-30 13:45
閱讀 549·2019-08-29 16:23
閱讀 1986·2019-08-29 16:23
閱讀 976·2019-08-29 15:18
閱讀 2256·2019-08-29 12:57