摘要:累加器累加器本來只能使用與下,但是版本或以上,部分累加器還能使用于。當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用。
回顧 相關(guān)文章回顧
mongoDB查詢進(jìn)階--聚合管道(一)回顧
mongoDB查詢進(jìn)階--聚合管道(二)回顧
mongoDB查詢進(jìn)階--聚合管道(三)回顧
管道操作符可以分為三類:
階段操作符(Stage Operators)
表達(dá)式操作符(Expression Operators)
累加器(Accumulators)
參考MongoDB官網(wǎng):https://docs.mongodb.com/manual/reference/operator/aggregation
累加器(Accumulators)本篇主要內(nèi)容是管道操作符中的累加器。
累加器本來只能使用與$groud下,但是版本3.2或以上,部分累加器還能使用于$project。當(dāng)在$group中使用時(shí),累加器是針對每個(gè)分組使用的;當(dāng)在$project中使用時(shí),累加器則是針對每個(gè)字面量起作用。
常用累加器操作符 | 簡述 |
---|---|
$sum | 求和操作符,v3.2+可以用于$group或是$poject |
$avg | 求均值操作符,v3.2+可以用于$group或是$poject |
$first | 用于返回分組的第一個(gè)值,只能用于$group |
$last | 用于返回分組的最后一個(gè)值,只能用于$group |
$max | 用于返回分組的最大值,v3.2+可以用于$group或是$poject |
$min | 用于返回分組的最小值,v3.2+可以用于$group或是$poject |
用法:
$group下使用
{ $sum:}
$project下使用:
{ $sum:} or { $sum: [ , ... ] }
說明:
列子 | 值 | 結(jié)果 |
---|---|---|
{ $sum : |
只含數(shù)字 | 所有值的和 |
{ $sum : |
含數(shù)字和非數(shù)字 | 所有數(shù)字值的和 |
{ $sum : |
非數(shù)字或不存在 | 0 |
舉例:
$avg 求均值操作符請看后面的綜合示例
用法:
$group下使用
{ $avg:}
$project下使用:
{ $avg:} or { $avg: [ , ... ] }
舉例:
$first 求第一值操作符請看后面的綜合示例
用法:
{ $first:}
舉例:
假設(shè)數(shù)據(jù):
[ { _id: 1, name: "kate", class: "a" }, { _id: 2, name: "jack", class: "a" }, { _id: 3, name: "kent", class: "b" }, ]
操作:
db.collection.aggregate( [ { $group: { _id: "$class", firstPersonName: { $first: "$name" } } } ] )
結(jié)果:
[ { _id: "a", firstPersonName: "kate" }, { _id: "b", firstPersonName: "kent" }, ]$last 求最后值操作符
用法:
{ $last:}
舉例:
假設(shè)數(shù)據(jù):
[ { _id: 1, name: "kate", class: "a" }, { _id: 2, name: "jack", class: "a" }, { _id: 3, name: "kent", class: "b" }, ]
操作:
db.collection.aggregate( [ { $group: { _id: "$class", firstPersonName: { $last: "$name" } } } ] )
結(jié)果:
[ { _id: "a", firstPersonName: "jack" }, { _id: "b", firstPersonName: "kent" }, ]$max 求最大值操作符
用法:
$group下使用
{ $max:}
$project下使用:
{ $max:} or { $max: [ , ... ] }
舉例:
$min 求最小值操作符請看后面的綜合示例
用法:
$group下使用
{ $min:}
$project下使用:
{ $min:} or { $min: [ , ... ] }
舉例:
綜合示例請看后面的綜合示例
假設(shè)有一個(gè)關(guān)于成績的集合
[ { _id: 1, name: "kate", score: 80, class: "a", subject: "A" }, { _id: 2, name: "kate", score: 60, class: "a", subject: "B" }, { _id: 3, name: "jack", score: 90, class: "a", subject: "A" }, { _id: 4, name: "jack", score: 60, class: "a", subject: "B" }, { _id: 5, name: "nick", score: 80, class: "b", subject: "A" }, { _id: 6, name: "nick", score: 90, class: "b", subject: "B" }, { _id: 7, name: "kent", score: 50, class: "b", subject: "A" }, { _id: 7, name: "kent", score: 30, class: "b", subject: "B" }, ]示例一
需求:
獲取各科目的最高分
獲取各科目的最低分
獲取各科目的平均分
操作:
db.collection.aggregate( [ { $group: { _id: "$subject", maxScore: { $max: "$score" }, minScore: { $min: "$score" }, avgScore: { $avg: "$score" }, } } ] )
結(jié)果:
[ { _id: "A", maxScore: 90, minScore: 50, avgScore: 75 }, { _id: "B", maxScore: 90, minScore: 30, avgScore: 60 }, ]示例二
需求:
獲取每人的總分
從高到低排序
操作:
db.collection.aggregate( [ { $group: { _id: "$name", totalScore: { $sum: "$score" } } }, { $sort: { totalScore: -1 } }, { $project: { _id: 0, name: "$_id", totalScore: 1, } } ] )
結(jié)果:
[ { name: "nick", totalScore: 170 }, { name: "jack", totalScore: 150 }, { name: "kate", totalScore: 140 }, { name: "kent", totalScore: 80 } ]
感謝閱讀~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19072.html
摘要:累加器累加器本來只能使用與下,但是版本或以上,部分累加器還能使用于。當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧mongoDB查詢進(jìn)階--聚合管道(三)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(Stage Oper...
摘要:當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會(huì)更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細(xì)說一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...
摘要:當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會(huì)更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細(xì)說一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...
摘要:用法取反操作符,返回表達(dá)式中取反后的布爾值。用法示例假設(shè)有一個(gè)關(guān)于考試成績的集合操作如下返回結(jié)果數(shù)學(xué)操作符操作符簡述求絕對值操作符,于版新加入。用法進(jìn)一法取整操作符,取于版新加入。用法切割操作符,用于對字符串進(jìn)行分切。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(...
摘要:用法取反操作符,返回表達(dá)式中取反后的布爾值。用法示例假設(shè)有一個(gè)關(guān)于考試成績的集合操作如下返回結(jié)果數(shù)學(xué)操作符操作符簡述求絕對值操作符,于版新加入。用法進(jìn)一法取整操作符,取于版新加入。用法切割操作符,用于對字符串進(jìn)行分切。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(...
閱讀 712·2021-11-22 13:52
閱讀 1518·2021-09-27 13:36
閱讀 2818·2021-09-24 09:47
閱讀 2172·2021-09-22 15:48
閱讀 3600·2021-09-22 15:39
閱讀 1463·2019-08-30 12:43
閱讀 2918·2019-08-29 18:39
閱讀 3181·2019-08-29 12:51