MongoDB 聚合管道操作符

MongoDB 聚合管道操作符

聚合管道操作符用于构建在聚合管道阶段中使用的表达式。以下是聚合管道操作符的列表。

数学表达式操作符

用于对数值进行数学运算。某些数学表达式还支持数据运算。

$abs

abs操作符返回一个数的绝对值。

语法:

{ $abs: <number> }

示例:

db.score.aggregate([
   {
     school: { marks: {abs: { subtract: [ "max", "$min" ] } } }
   }
])

$add

它可以添加两个或更多个数字和一个日期。如果其中一个参数是日期,则该日期将另一个参数视为要添加到日期中的毫秒数。

语法:

{ $add: [ <expression1>, <expression2>, ... ] }

示例:

db.books.aggregate(
   [
     { project: { item: 1, total: {add: [ "price", "tax" ] } } }
   ]
)

$ceil

ceil运算符返回大于或等于指定数字的最小整数。

语法:

{ $ceil: <number> }

示例:

db.samples.aggregate([ { project: { value: 1, ceilingValue: {ceil: "$value" } } } ])

$divide

它将一个或多个数字除以另一个数字并返回结果。

语法:

{ $divide: [ <expression1>, <expression2> ] }

示例:

db.planning.aggregate( [ { project: { name: 1, workdays: {divide: [ "$hours", 8 ] } } } ] )

$exp

指数运算符用于将自然对数的底数e提高到指定的指数,并返回结果。

语法:

{ $exp: <exponent> }

示例:

db.accounts.aggregate( [ { project: { effectiveRate: {subtract: [ { exp: "rate"}, 1 ] } } } ] )

$floor

floor运算符返回小于或等于指定数字的最大整数。

语法:

{ $floor: <number> }

示例:

db.samples.aggregate( [ { project: { value: 1, floorValue: {floor: "$value" } } } ] )

$ln

ln运算符计算一个数的自然对数,并将结果以double型返回。

语法:

{ $ln: <number> }

示例:

db.sales.aggregate( [ { project: { x: "year", y: { ln: "sales"  } } } ] )

$log

log运算符用于计算指定底数下一个数的对数,并返回结果为double类型。

语法:

{ $log: [ <number>, <base> ] }

示例:

db.examples.aggregate([
   { project: { bitsNeeded:
      {floor: { add: [ 1, {log: [ "$positiveInt", 2 ] } ] } } }
      }
])

$log10

log10运算符计算一个数字的以10为底的对数,并将结果返回为double类型。

语法:

{ $log10: <number> }

示例:

db.samples.aggregate( [ { project: { pH: {multiply: [ -1, { log10: "H3O" } ] } } } ] )

$mod

模运算符用于将一个数除以另一个数,并返回余数。

语法:

{ $mod: [ <expression1>, <expression2> ] }

示例:

db.planning.aggregate(
   [
     { project: { remainder: {mod: [ "hours", "tasks" ] } } }
   ]
)

$multiply

乘法运算符给出两个或多个数字的乘积。

语法:

{ $multiply: [ <expression1>, <expression2>, ..... ] }

示例:

db.sales.aggregate( [ { project: { date: 1, item: 1, total: {multiply: [ "price", "quantity" ] } } } ] )

$pow

pow 运算符将给定的数字提高到指定的指数,并返回结果。

语法:

{ $pow: [ <number>, <exponent> ] }

示例:

db.quizzes.aggregate( [ { project: { variance: {pow: [ { stdDevPop: "scores.score" }, 2 ] } } } ] )

$round

round运算符将一个数字四舍五入到整数或指定的小数位数。

语法:

{ $round : [ <number>, <place> ] }

示例:

db.samples.aggregate( [ { project: { roundedValue: {round: [ "$value", 1 ] } } } ] )

$sqrt

sqrt运算符以double类型返回一个正数的平方根。

语法:

{ $sqrt: <number> }

示例:

db.points.aggregate([
   {
     project: {
        distance: {sqrt: {
               add: [
                  {pow: [ { subtract: [ "p2.y", "p1.y" ] }, 2 ] },
                  {pow: [ { subtract: [ "p2.x", "$p1.x" ] }, 2 ] }
               ]
           }
        }
     }
   }
])

$subtract

减法运算符用于减去两个或多个数字,返回这些数字的差值。

语法:

{ $subtract: [ <expression1>, <expression2> ] }

示例:

db.sales.aggregate( [ { project: { item: 1, total: {subtract: [ { add: [ "price", "fee" ] }, "discount" ] } } } ] )

$trunc

trunc命令会删除指定小数位后的数据。

语法:

{ $trunc : [ <number>, <place> ] }

示例:

db.samples.aggregate( [ { project: { truncatedValue: {trunc: [ "$value", 1 ] } } } ] )

数组表达式操作符

$arrayElemAt

它返回指定数组索引处的元素。

语法:

{ $arrayElemAt: [ <array>, <idx> ] }

示例:

db.users.aggregate([
   {
     project:
      {
         name: 1,
         first: {arrayElemAt: [ "favorites", 0 ] },
         last: {arrayElemAt: [ "$favorites", -1 ] }
      }
   }
])

$arrayToObject

数组ToObject操作符将一个数组转换为一个单独的文档。

语法:

[ [ "item", "abc123"], [ "qty", 25 ] ]

示例:

db.inventory.aggregate(
   [
      {
         project: {
            item: 1,
            dimensions: {arrayToObject: "$dimensions" }
         }
      }
   ]
)

$concatArrays

concatArrays操作符将数组连接起来返回连接后的数组。

语法:

{ $concatArrays: [ <array1>, <array2>, ... ] }

示例:

db.warehouses.aggregate([
   { project: { items: {concatArrays: [ "instock", "ordered" ] } } }
])

$filter

filter运算符根据指定的条件选择数组的子集来返回结果。

语法:

{ $filter: { input: <array>, as: <string>, cond: <expression> } }

示例:

$in

in运算符返回一个布尔值,表示指定的值是否在数组中。

语法:

{ $in: [ <expression>, <array expression> ] }

示例:

db.fruit.aggregate([
  {
    project: {
      "store location" : "location",
      "has bananas" : {
        in: [ "bananas", "in_stock" ]
      }
    }
  }
])

$indexOfArray

indexOfArray操作符在数组中搜索指定值的出现,并返回第一个出现的数组索引。

语法:

{ $indexOfArray: [ <array expression>, <search expression>, <start>, <end> ] }

示例:

db.inventory.aggregate(
   [
     {
       project:
          {
            index: {indexOfArray: [ "$items", 2 ] },
          }
      }
   ]
)

$isArray

它确定并返回一个布尔值,指示操作数是否为数组。

语法:

{ $isArray: [ <expression> ] }

示例:

db.shop.aggregate( [ { project: { items: {cond:
            { if: { and: [ {isArray: "instock" }, {isArray: "ordered" } ] }, then: {concatArrays: [ "instock", "ordered" ] },
        else: "One or more fields is not an array." } } } } )

$map

map操作符将值附加到数组中的每个项,并返回应用结果的数组。

语法:

{ $map: { input: <expression>, as: <string>, in: <expression> } }

示例:

$objectToArray

这个运算符将一个文档转换为数组。

语法:

{ $objectToArray: <object> }

示例:

db.inventory.aggregate(
   [
      {
         project: {
            item: 1,
            dimensions: {objectToArray: "$dimensions" }
         }
      }
   ]
)

$range

range运算符返回一个由生成的数字序列组成的数组。

语法:

{ $range: [ <start>, <end>, <non-zero step> ] }

示例:

db.distances.aggregate([{
    project: {
        _id: 0,
        city: 1,
        "Rest stops": {range: [ 0, "$distance", 25 ] } } } ] )

$reduce

reduce运算符对数组中的每个元素应用表达式,并将它们合并为一个单一的值。

语法:

{
    $reduce: {
        input: <array>,
        initialValue: <expression>,
        in: <expression>
    }
}

示例:

$reverseArray

它返回一个按照相反顺序排列的数组。

语法:

{ $reverseArray: <array expression> }

示例:

db.users.aggregate( [ { project: {name: 1,
reverseFavorites: {reverseArray: "$favorites" } } } ] )

$size

大小操作符计算并返回数组中的项总数。

语法:

{ $size: <expression> }

示例:

db.books.aggregate( [ { project: { item: 1, numberOfColors: {cond: { if: { isArray: "colors" }, then: { size: "colors" }, else: "NA"} } } } ] )

$slice

切片操作符会返回数组的子集。

语法:

{ $slice: [ <array>, <n> ] }

示例:

db.books.aggregate( [ { project: { name: 1, threeFavorites: {slice: [ "$favorites", 3 ] } } }
])

$zip

zip运算符将数组转置,使得输出数组的第一个元素为包含第一个输入数组的第一个元素的数组。

语法:

 {
    $zip: { inputs: [ <array expression1>,  ... ], useLongestLength: <boolean>, defaults:  <array expression> } }

示例:

db.matrices.aggregate([{ project: {  _id: false,   transposed: {zip: { inputs: [
          { arrayElemAt: [ "matrix", 0 ] },
          { arrayElemAt: [ "matrix", 1 ] },
          { arrayElemAt: [ "matrix", 2 ] },
        ] } } } } ] )

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程