成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【mongoDB查詢進(jìn)階】聚合管道(三)--表達(dá)式操作符

wenhai.he / 2116人閱讀

摘要:用法取反操作符,返回表達(dá)式中取反后的布爾值。用法示例假設(shè)有一個(gè)關(guān)于考試成績的集合操作如下返回結(jié)果數(shù)學(xué)操作符操作符簡述求絕對值操作符,于版新加入。用法進(jìn)一法取整操作符,取于版新加入。用法切割操作符,用于對字符串進(jìn)行分切。

回顧 相關(guān)文章回顧

mongoDB查詢進(jìn)階--聚合管道(一)回顧
mongoDB查詢進(jìn)階--聚合管道(二)回顧

管道操作符的分類

管道操作符可以分為三類:

階段操作符(Stage Operators)

表達(dá)式操作符(Expression Operators)--主要用于$project

累加器(Accumulators)--主要用于$group分組

參考MongoDB官網(wǎng):https://docs.mongodb.com/manual/reference/operator/aggregation

本篇主要內(nèi)容是管道操作符中的表達(dá)式操作符。

表達(dá)式操作符(Expression Operators)

表達(dá)式操作符主要用于在管道中構(gòu)建表達(dá)式時(shí)使用,使用類似于函數(shù)那樣需要參數(shù),主要用于$project操作符中,用于構(gòu)建表達(dá)式,使用方法一般如下:

方法1:

{ : [ ,  ... ] }

方法2:

{ :  }
表達(dá)式操作符分類

布爾值操作符(Boolean Operators)

集合操作符(Set Operators)

比較操作符(Comparison Operators)

數(shù)學(xué)操作符(Arithmetic Operators)

字符串操作符(String Operators)

文本搜索操作符(Text Search Operators)

數(shù)組操作符(Array Operators)

變量操作符(Variable Operators)

字面量操作符(Literal Operators)

日期操作符(Date Operators)

條件操作符(Conditional Operators)

數(shù)據(jù)類型操作符(Data Type Operators)

常用表達(dá)式操作符

布爾值操作符(Boolean Operators)

操作符 簡述
$and 邏輯與操作符,當(dāng)他的表達(dá)式中所有值都是true的時(shí)候,才返回true。 用法:{ $and: [ , , ... ] }。
$or 邏輯或操作符,當(dāng)他的表達(dá)式中有值是true的時(shí)候,就會返回true。用法:{ $or: [ , , ... ] }
$not 取反操作符,返回表達(dá)式中取反后的布爾值。用法:{ $not: [ ] }
示例
例子 結(jié)果
{ $and: [ 1, "green" ] } true
{ $and: [ ] } true
{ $and: [ [ null ], [ false ], [ 0 ] ] } true
{ $and: [ null, true ] } false
{ $and: [ 0, true ] } false
{ $or: [ true, false ] } true
{ $or: [ [ false ], false ] } true
{ $or: [ null, 0, undefined ] } false
{ $or: [ ] } false
{ $not: [ true ] } false
{ $not: [ [ false ] ] } false
{ $not: [ false ] } true
{ $not: [ null ] } true
{ $not: [ 0 ] } true

比較操作符(Comparison Operators)

操作符 簡述
$cmp 比較操作符,比較表達(dá)式中兩個(gè)值的大小,如果第一個(gè)值小于第二個(gè)值則返回-1,相等返回0,大于返回1。用法{ $cmp: [ , ] }
$eq 比較表達(dá)式中兩個(gè)是否相等,是則返回true,否則返回false。用法{ $eq: [ , ] }
$gt 比較表達(dá)式中第一個(gè)值是否大于第二個(gè)值,是則返回true,否則返回false。用法{ $gt: [ , ] }
$gte 比較表達(dá)式中第一個(gè)值是否大于等于第二個(gè)值,是則返回true,否則返回false。用法{ $gte: [ , ] }
$lt 比較表達(dá)式中第一個(gè)值是否小于第二個(gè)值,是則返回true,否則返回false。用法{ $lt: [ , ] }
$lte 比較表達(dá)式中第一個(gè)值是否小于等于第二個(gè)值,是則返回true,否則返回false。用法{ $lte: [ , ] }
$ne 比較表達(dá)式中兩個(gè)是否相等,不過返回值與$eq相反,是則返回false,否則返回true。用法{ $ne: [ , ] }
示例

假設(shè)有一個(gè)關(guān)于考試成績的集合:

{ "_id" : 1, "name" : "abc1",  score: 80 }
{ "_id" : 2, "name" : "avc1",  score: 82 }
{ "_id" : 3, "name" : "adc1",  score: 79 }
{ "_id" : 4, "name" : "awc1",  score: 60 }
{ "_id" : 5, "name" : "xyz1",  score: 50 }
{ "_id" : 6, "name" : "VWZ1",  score: 100 }

操作如下:

db.collection.aggregate(
   [
     {
       $project:
          {
            name: 1,
            score: 1,
            cmp60: { $cmp: [ "$score", 60 ] },
            eq100: { $eq: [ "$score", 100 ] },
            gt80: { $gt: [ "$score", 80 ] },
            gte80: { $gte: [ "$score", 80 ] },
            lt80: { $lt: [ "$score", 80 ] },
            lte80: { $lte: [ "$score", 80 ] },
            ne100: { $ne: [ "$score", 100 ] },
            _id: 0
          }
     }
   ]
)

返回結(jié)果:

{ "name" : "abc1", score: 80, cmp60: 1, eq100: false, gt80: false, gte80: true, lt80: false, lte80: true, ne100: true }
{ "name" : "avc1", score: 82, cmp60: 1, eq100: false, gt80: true, gte80: true, lt80: false, lte80: false, ne100: true }
{ "name" : "adc1", score: 79, cmp60: 1, eq100: false, gt80: false, gte80: false, lt80: true, lte80: false, ne100: true }
{ "name" : "awc1", score: 60, cmp60: 0, eq100: false, gt80: false, gte80: false, lt80: true, lte80: true, ne100: true }
{ "name" : "xyz1", score: 50, cmp60: -1, eq100: false, gt80: false, gte80: false, lt80: true, lte80: true, ne100: true }
{ "name" : "VWZ1", score: 100, cmp60: 1, eq100: true, gt80: true, gte80: true, lt80: false, lte80: false, ne100: false }

數(shù)學(xué)操作符(Arithmetic Operators)

操作符 簡述
$abs 求絕對值操作符,于v3.2版新加入。用法:{ $abs: }
$add 求和操作符,返回所有表達(dá)式相加起來的結(jié)果。用法:{ $add: [ , , ... ] }
$ceil 進(jìn)一法取整操作符,取 于v3.2版新加入。用法:{ $ceil: }
$divide 求商操作符,返回表達(dá)式1除以表達(dá)式2的商。用法:{ $divide: [ , ] }
$subtract 求差操作符,返回表達(dá)式1減去表達(dá)式2的結(jié)果。用法:{ $subtract: [ , ] }
$multiply 求積操作符,返回所有表達(dá)式相乘的結(jié)果。用法:{ $multiply: [ , , ... ] }
$mod 求余操作符,返回所有表達(dá)式1除以表達(dá)式2所得到的余數(shù)。用法:{ $multiply: [ , ] }
示例
例子 結(jié)果
{ $abs: -1 } 1
{ $abs: 1 } 1
{ $abs: null } null
{ $add: [1, 1] } 2
{ $ceil: 1 } 1
{ $ceil: 7.80 } 8
{ $ceil: -2.8 } -2
{ $divide: [40, 8] } 5
{ $subtract: [10, 8] } 2
{ $multiply: [5, 8] } 40
{ $mob: [80, 7] } 3
{ $mob: [80, 8] } 0

Tips: $add將一個(gè)日期類型和數(shù)字類型相加會變成日期類型。 這樣的話,當(dāng)數(shù)據(jù)庫存儲的是時(shí)間戳但是需要又想對其使用日期操作符的話,就可以通過這樣的方法,先讓其變成日期類型,然后再使用日期操作符,用法參考:{ $add: [ new Date(0), "$ts" ] }。

字符串操作符(String Operators)

操作符 簡述
$concat 連接操作符,將給定表達(dá)式中的字符串連接一起。用法:{ $concat: [ , , ... ] }
$split 切割操作符,用于對字符串進(jìn)行分切。用法:{ $split: [ , ] }
$toLower 用于返回字符串的小寫形式。用法:{ $toLower: }
$toUpper 用于返回字符串的大寫形式。用法:{ $toUpper: }
$substr 用于返回子字符串,v3.4+版本不建議使用,應(yīng)該使用substrBytes或substrCP,v3.4+版本使用的話,相當(dāng)于substrBytes。用法:{ $substr: [ , , ] }
$substrBytes 用于根據(jù)UTF-8下的字節(jié)位置返回子字符串(起始位置為0),于v3.4新增。用法:{ $substrBytes: [ , , ] }
$substrCP 用于根據(jù)UTF-8下的Code Point位置返回子字符串(起始位置為0),于v3.4新增。用法:{ $substrCP: [ , , ] }

Code Point: (1) Any value in the Unicode codespace; that is, the range of integers from 0 to 10FFFF16. Not all code points are assigned to encoded characters. See code point type. (2) A value, or position, for a character, in any coded character set.

示例
例子 結(jié)果
{ $concat: [ "item", " - ", "a" ] } item - a
{ $split: [ "June-15-2013", "-" ] } [ "June", "15", "2013" ]
{ $split: [ "banana split", "a" ] } [ "b", "n", "n", " split" ]
{ $split: [ "headphone jack", 7 ] } $split第二個(gè)參數(shù)必須是一個(gè)字符串,不能是數(shù)字
{ $toLower: "ITEM" } "item"
{ $toLower: "Item" } "item"
{ $toLower: null } ""
{ $toUpper: "item" } "ITEM"
{ $toUpper: "Item" } "ITEM"
{ $toUpper: null } ""
{ $substrBytes: [ "abcde", 1, 2 ] } "bc"
{ $substrBytes: [ "Hello World!", 6, 5 ] } "World"
{ $substrBytes: [ "cafétéria", 0, 5 ] } "café"
{ $substrBytes: [ "cafétéria", 5, 4 ] } "tér"
{ $substrBytes: [ "cafétéria", 7, 3 ] } "Error: Invalid range, starting index is a UTF-8 continuation byte."
{ $substrBytes: [ "cafétéria", 3, 1 ] } "Error: Invalid range, ending index is in the middle of a UTF-8 character."
{ $substrBytes: [ "壽司sushi", 0, 3 ] } "壽"
{ $substrCP: [ "abcde", 1, 2 ] } "bc"
{ $substrCP: [ "Hello World!", 6, 5 ] } "World"
{ $substrCP: [ "cafétéria", 0, 5 ] } "cafét"
{ $substrCP: [ "cafétéria", 5, 4 ] } "tér"
{ $substrCP: [ "cafétéria", 7, 3 ] } "ia"
{ $substrCP: [ "cafétéria", 3, 1 ] } "é"
{ $substrCP: [ "壽司sushi", 0, 3 ] } "壽司s"

日期操作符(Date Operators)

操作符 簡述
$dayOfYear 返回一年中的一天,值在1和366(閏年)之間。用法:{ $dayOfYear: }
$dayOfMonth 返回一個(gè)月中的一天,值在1和31之間。用法:{ $dayOfMonth: }
$dayOfWeek 返回一周中的一天,值在1(周日)和7(周六)之間。用法:{ $dayOfWeek: }
$year 返回年份,eg:2017。用法:{ $year: }
$month 返回月份,值在1和12之間。用法:{ $month: }
$week 返回周 ,值在0和53之間。用法:{ $week: }
$hour 返回時(shí) ,值在0和23之間。用法:{ $hour: }
$minute 返回分 ,值在0和59之間。用法:{ $minute: }
$second 返回秒,值在0和60之間(閏秒)。用法:{ $second: }
$millisecond 返回毫秒,值在0和999之間。用法:{ $millisecond: }
$dateToString 返回日期的字符串。用法:{ $dateToString: { format: , date: } }
示例

假如有以下數(shù)據(jù):

{ "_id" : 1, "item" : "abc", "price" : 10, "quantity" : 2, "date" : ISODate("2014-01-01T08:15:39.736Z") }

進(jìn)行如下操作:

db.collection.aggregate(
   [
     {
       $project:
         {
           year: { $year: "$date" },
           month: { $month: "$date" },
           day: { $dayOfMonth: "$date" },
           hour: { $hour: "$date" },
           minutes: { $minute: "$date" },
           seconds: { $second: "$date" },
           milliseconds: { $millisecond: "$date" },
           dayOfYear: { $dayOfYear: "$date" },
           dayOfWeek: { $dayOfWeek: "$date" },
           week: { $week: "$date" },
           yearMonthDayUTC: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
          time: { $dateToString: { format: "%H:%M:%S:%L", date: "$date" } }
         }
     }
   ]
)

返回結(jié)果:

{
  "_id" : 1,
  "year" : 2014,
  "month" : 1,
  "day" : 1,
  "hour" : 8,
  "minutes" : 15,
  "seconds" : 39,
  "milliseconds" : 736,
  "dayOfYear" : 1,
  "dayOfWeek" : 4,
  "week" : 0,
  "yearMonthDayUTC" : "2014-01-01", 
  "time" : "08:15:39:736"
}

條件操作符(Conditional Operators)

操作符 簡述
$cond 用法:{ $cond: [ , , ] } 或者 v2.6+還支持{ $cond: { if: , then: , else: } }
$ifNull 用法:{ $ifNull: [ , ] }
示例

假設(shè)有一個(gè)關(guān)于考試成績的集合:

{ "_id" : 1, "name" : "a",  score: 80 }
{ "_id" : 2, "name" : "b",  score: 69 }
{ "_id" : 3, "name" : "c",  score: 53 }
{ "_id" : 3, "name" : null,  score: 70 }

操作如下:

db.collection.aggregate(
   [
      {
         $project:
           {
              _id: 0,
              score: 1,
              pass:
                {
                  $cond: [ { $gte: [ "$score", 60 ] }, 1, 0 ]
                },
              description: { $ifNull: [ "$name", "Unspecified" ] } 
           }
      }
   ]
)

返回結(jié)果:

{ "name" : "a",  score: 80, pass: 1 }
{ "name" : "b",  score: 69, pass: 1 }
{ "name" : "c",  score: 53, pass: 0 }
{ "name" : "Unspecified",  score: 70, pass: 1 }
總結(jié)

本文介紹表達(dá)式操作符的分類和常用的表達(dá)式操作符的用法,表達(dá)式操作符主要作用于$project下,通過使用這些操作符可以對文檔中的字面量進(jìn)行處理并返回,進(jìn)而返回更多有用的數(shù)據(jù)。

感謝閱讀~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/19078.html

相關(guān)文章

  • mongoDB查詢進(jìn)階聚合管道(四) -- 累加器(Accumulators)

    摘要:累加器累加器本來只能使用與下,但是版本或以上,部分累加器還能使用于。當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧mongoDB查詢進(jìn)階--聚合管道(三)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(Stage Oper...

    tomato 評論0 收藏0
  • mongoDB查詢進(jìn)階聚合管道(四) -- 累加器(Accumulators)

    摘要:累加器累加器本來只能使用與下,但是版本或以上,部分累加器還能使用于。當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧mongoDB查詢進(jìn)階--聚合管道(三)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(Stage Oper...

    wmui 評論0 收藏0
  • mongoDB查詢進(jìn)階聚合管道()--表達(dá)操作

    摘要:用法取反操作符,返回表達(dá)式中取反后的布爾值。用法示例假設(shè)有一個(gè)關(guān)于考試成績的集合操作如下返回結(jié)果數(shù)學(xué)操作符操作符簡述求絕對值操作符,于版新加入。用法進(jìn)一法取整操作符,取于版新加入。用法切割操作符,用于對字符串進(jìn)行分切。 回顧 相關(guān)文章回顧 mongoDB查詢進(jìn)階--聚合管道(一)回顧mongoDB查詢進(jìn)階--聚合管道(二)回顧 管道操作符的分類 管道操作符可以分為三類: 階段操作符(...

    v1 評論0 收藏0
  • mongoDB查詢進(jìn)階聚合管道(二) -- 階段操作

    摘要:當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細(xì)說一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...

    brianway 評論0 收藏0
  • mongoDB查詢進(jìn)階聚合管道(二) -- 階段操作

    摘要:當(dāng)在中使用時(shí),累加器是針對每個(gè)分組使用的當(dāng)在中使用時(shí),累加器則是針對每個(gè)字面量起作用,具體用法下一篇文章闡述。另外再加以配合表達(dá)式操作符組成的表達(dá)式或者在或中使用累加器能查詢統(tǒng)計(jì)的內(nèi)容會更加的多樣化。 上篇最后說到管道操作符,本篇文章將詳細(xì)說一下管道操作符。 mongoDB查詢進(jìn)階--聚合管道(一)回顧 什么是管道操作符(Aggregation Pipeline Operators) ...

    flybywind 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<