摘要:環(huán)境使用可以實現(xiàn)較為復(fù)雜的數(shù)據(jù)聚合操作,例如匯總?cè)ブ貐R總分組統(tǒng)計等。返回結(jié)果為數(shù)組,需要注意數(shù)據(jù)大小不能超過。的返回結(jié)果為游標(biāo),可循環(huán)取數(shù)。
環(huán)境aggregate
mongos 3.0.14
使用 aggregate 可以實現(xiàn)較為復(fù)雜的數(shù)據(jù)聚合操作,例如 匯總(count)、去重匯總(distinct count)、分組統(tǒng)計(group having)等。
aggregate 返回結(jié)果為數(shù)組,需要注意數(shù)據(jù)大小不能超過16M。
例如:
$pipeline = [ ["$match" => $tmpCondition], ["$group" => [ "_id" => ["user_id"=>"$user_id"] ]], ["$group" => [ "_id" => "_id.user_id", "number" => ["$sum"=>1] ]] ]; $options = [ "allowDiskUse"=>true, "cursor"=>["batchSize"=>1] ]; $data = MongoSvc::get("user")->user_info->aggregate($pipeline,$options);aggregateCursor
對于大量返回結(jié)果的聚合,可以使用 aggregateCursor 返回游標(biāo),可以避免數(shù)據(jù)大小超限。
aggregateCursor 的返回結(jié)果為游標(biāo),可循環(huán)取數(shù)。
例如:
$pipeline = [ ["$match" => $matchArr], ["$project" => ["id"=>1,"_id"=>0]], ["$group" => [ "_id" => "$id", "count" => ["$sum" => 1] ]], ["$match" => [ "count" => ["$gt" => 1] ]] ]; //這里改為aggregateCursor用游標(biāo)循環(huán)獲取 $data = MongoSvc::get("user")->user_info->aggregateCursor($pipeline);pipeline 參數(shù)
$match
條件匹配。
$addFields
增加新字段。
$count
該stage的文檔總數(shù)。
$group
分組。
$limit
限制數(shù)量。
$skip
跳步。
$sort
排序。
$out
輸出結(jié)果到集合。
$project
過濾字段。
https://docs.mongodb.com/manu...
options 參數(shù)explain boolean
處理信息。
allowDiskUse boolean
true 可往磁盤寫臨時數(shù)據(jù)。
cursor
cursor: { batchSize:
給返回集合設(shè)置一個初始大小。
hint string or document
強制指定索引。
https://docs.mongodb.com/manu...
查詢示例匯總統(tǒng)計文檔中某個字段(如"sum")的count值:
$pipeline = [ ["$match" => $tmpCondition], ["$group" => [ "_id" => ["sum"], "sum_value" => ["$sum" => "$money"] ]] ];
某列的去重后的數(shù)據(jù):
$pipeline = [ ["$match" => $tmpCondition], ["$group" => [ "_id" => ["user_id" => "$user_id"] ]] ];
統(tǒng)計某列(如"user_id")去重后的count值:
$pipeline = [ ["$match" => $tmpCondition], ["$group" => [ "_id" => ["user_id"=>"$user_id"] ]], ["$group" => [ "_id" => "_id.user_id", "number" => ["$sum"=>1] ]] ]; $pipeline = [ ["$match" => $tmpCondition], ["$group" => [ "_id" => ["qid" => "$qid"], "max_number" => ["$max" => "$days"] ]], ["$group" => [ "_id" => ["number" => "$max_number"], "total" => ["$sum" => 1] ]] ];
統(tǒng)計分組后,各組內(nèi)的某列匯總值:
$pipeline = [ ["$match" => $tmpCondition], ["$group" => [ "_id" => ["type" => "$type"], "sum_value" => ["$sum" => "$number"] ]] ];
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19329.html
摘要:一按照等條件組合查詢,同時添加和原生二執(zhí)行操作,更新單個文檔原生三通過命令更新文檔并且返回更新之后的文檔只能作用于單個文檔原生四聚合操作根據(jù)某一字段,并且將文檔中的某一字段合并到數(shù)組中,最后取數(shù)組中的第一個元素原生五數(shù)組查詢,在某個中包 一、按照in、eq、lte等條件組合查詢,同時添加sort和limit1、原生 db.message.find( { receiverRol...
摘要:上篇文章中我們已經(jīng)學(xué)習(xí)了中幾個基本的管道操作符,本文我們再來看看其他的管道操作符。算術(shù)操作符通過算術(shù)操作符我們可以對分組后的文檔進(jìn)行求和或者求平均數(shù)。好了,中的管道操作符我們就先說到這里,小伙伴們有問題歡迎留言討論。 上篇文章中我們已經(jīng)學(xué)習(xí)了MongoDB中幾個基本的管道操作符,本文我們再來看看其他的管道操作符。 本文是MongoDB系列的第十三篇文章,了解前面的文章有助于更好的理...
摘要:簡單地說,倒排索引就是把與對調(diào)之后的索引,構(gòu)建倒排索引的目的是提升搜索性能。本文將介紹中兩種構(gòu)建倒排索引的方法與。 摘要: 為MongoDB中的數(shù)據(jù)構(gòu)建倒排索引(Inverted Index),然后緩存到內(nèi)存中,可以大幅提升搜索性能。本文將通過為電影數(shù)據(jù)構(gòu)建演員索引,介紹兩種構(gòu)建倒排索引的方法:MapReduce和Aggregation Pipeline。 GitHub地址: 作者:...
摘要:將返回結(jié)果限制為前個。所以,聚合的結(jié)果必須要限制在以內(nèi)支持的最大響應(yīng)消息大小。包含字段和排除字段的規(guī)則與常規(guī)查詢中的語法一致。改變字符大小寫的操作,只保證對羅馬字符有效。只對羅馬字符組成的字符串有效。 上一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件下一篇文章:MongoDB指南---17、MapReduce 如果你有數(shù)據(jù)存儲在Mon...
摘要:將返回結(jié)果限制為前個。所以,聚合的結(jié)果必須要限制在以內(nèi)支持的最大響應(yīng)消息大小。包含字段和排除字段的規(guī)則與常規(guī)查詢中的語法一致。改變字符大小寫的操作,只保證對羅馬字符有效。只對羅馬字符組成的字符串有效。 上一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲文件下一篇文章:MongoDB指南---17、MapReduce 如果你有數(shù)據(jù)存儲在Mon...
閱讀 1472·2021-11-24 09:39
閱讀 1788·2021-11-22 15:25
閱讀 3739·2021-11-19 09:40
閱讀 3299·2021-09-22 15:31
閱讀 1299·2021-07-29 13:49
閱讀 1208·2019-08-26 11:59
閱讀 1321·2019-08-26 11:39
閱讀 933·2019-08-26 11:00