MongoDB教程
MongoDB运算符
MongoDB命令
MongoDB数据库
MongoDB Shell
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

exp运算符用于将欧拉数提高到指定的指数并返回结果。
语法:
{ $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运算符计算数字的自然对数,并以双精度形式返回结果。
语法:
{ $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为底,并以双精度返回结果。
语法:
{ $log10: <number> }
示例:
db.samples.aggregate( [ { $project: { pH: { $multiply: [ -1, { $log10: "$H3O" } ] } } } ] )

$mod

mod运算符将一个数除以另一个,然后返回余数。
语法:
{ $mod: [ <expression1>, <expression2> ] }
示例:
db.planning.aggregate(
   [
     { $project: { remainder: { $mod: [ "$hours", "$tasks" ] } } }
   ]
)

$multiply

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

arrayToObject运算符将数组转换为单个文档。
语法:
[ [ "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> } }
示例:
db.sales.aggregate([
   {
      $project: {
         items: {
            $filter: {
               input: "$items",
               as: "item",
               cond: { $gte: [ "$item.price", 100 ] }
            }
         }
      }
   }
])

$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> } }
示例:
db.grades.aggregate(
   [
      { $project:
         { adjustedGrades:
            {
              $map:
                 {
                   input: "$quizzes",
                   as: "grade",
                   in: { $add: [ "$grade", 2 ] }
                 }
            }
         }
      }
   ]
}

$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>
    }
}
示例:
db.clothes.aggregate( [ { $project: { "discountedPrice": {
          $reduce: { input: "$discounts", initialValue: "$price", in: { $multiply: [ "$value", { $subtract: [ 1, "$this" ] } ] } } } } } ] )

$reverseArray

它返回一个数组,其元素的顺序相反。
语法:
{ $reverseArray: <array expression> }
示例:
db.users.aggregate( [ { $project: {name: 1,
reverseFavorites: { $reverseArray: "$favorites" } } } ] )

$size

size运算符对数组中的项目总数进行计数并返回。
语法:
{ $size: <expression> }
示例:
db.books.aggregate( [ { $project: { item: 1, numberOfColors: { $cond: { if: { $isArray: "$colors" }, then: { $size: "$colors" }, else: "NA"} } } } ] )

$slice

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 ] },
        ] } } } } ] )

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4