📜  MongoDB aggregation-pipeline运算符

📅  最后修改于: 2020-11-23 00:56:32             🧑  作者: Mango

aggregation-pipeline运算符

聚合管道运算符构造用于聚合管道阶段的表达式。以下是聚合管道运算符的列表。

算术表达式运算符

它用于对数字执行算术运算。一些算术表达式也支持数据算术。

$ abs

abs运算符返回数字的绝对值。

句法:

{ $abs:  }

例:

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

$添加

它添加两个或多个数字和一个日期。如果参数之一是日期,则日期会将另一个参数视为毫秒,以加到日期上。

句法:

{ $add: [ , , ... ] }

例:

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

$ ceil

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

句法:

{ $ceil:  }

例:

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

$除

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

句法:

{ $divide: [ ,  ] }

例:

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

$ exp

exp运算符用于将欧拉数提高到指定的指数并返回结果。

句法:

{ $exp:  }

例:

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

$楼层

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

句法:

{ $floor:  }

例:

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

$ ln

ln运算符计算数字的自然对数,然后将结果作为双精度值返回。

句法:

{ $ln:  }

例:

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

$ log

日志运算符为指定的底数计算数字的日志,并将结果返回为double。

句法:

{ $log: [ ,  ] }

例:

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

$ log10

log10运算符计算数字的对数底数10,并将结果作为双精度值返回。

句法:

{ $log10:  }

例:

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

$ mod

mod运算符将一个数除以另一个,然后返回余数。

句法:

{ $mod: [ ,  ] }

例:

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

$乘

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

句法:

{ $multiply: [ , , ..... ] }

例:

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

$ pow

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

句法:

{ $pow: [ ,  ] }

例:

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

$圆

舍入运算符将数字舍入为整数或指定的小数位。

句法:

{ $round : [ ,  ] }

例:

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

$ sqrt

sqrt运算符将正数的平方根返回为double。

句法:

{ $sqrt:  }

例:

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

$减

减法运算符减去两个或多个数字以返回数字的差。

句法:

{ $subtract: [ ,  ] }

例:

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

$ trunc

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

句法:

{ $trunc : [ ,  ] }

例:

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

数组表达式运算符

$ arrayElemAt

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

句法:

{ $arrayElemAt: [ ,  ] }

例:

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: [ , , ... ] }

例:

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

$过滤器

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

句法:

{ $filter: { input: , as: , cond:  } }

例:

db.sales.aggregate([
   {
      $project: {
         items: {
            $filter: {
               input: "$items",
               as: "item",
               cond: { $gte: [ "$$item.price", 100 ] }
            }
         }
      }
   }
])

$ in

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

句法:

{ $in: [ ,  ] }

例:

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

$ indexOfArray

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

句法:

{ $indexOfArray: [ , , ,  ] }

例:

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

$ isArray

如果操作数是一个数组,它将确定并返回一个布尔值。

句法:

{ $isArray: [  ] }

例:

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: { input: , as: , in:  } }

例:

db.grades.aggregate(
   [
      { $project:
         { adjustedGrades:
            {
              $map:
                 {
                   input: "$quizzes",
                   as: "grade",
                   in: { $add: [ "$$grade", 2 ] }
                 }
            }
         }
      }
   ]
}

$ objectToArray

该运算符将文档转换为数组。

句法:

{ $objectToArray:  }


例:

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

$范围

范围运算符返回一个数组,其元素是生成的数字序列。

句法:

{ $range: [ , ,  ] }

例:

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

$减少

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

句法:

{
    $reduce: {
        input: ,
        initialValue: ,
        in: 
    }
}

例:

db.clothes.aggregate( [ { $project: { "discountedPrice": {
          $reduce: { input: "$discounts", initialValue: "$price", in: { $multiply: [ "$$value", { $subtract: [ 1, "$$this" ] } ] } } } } } ] )

$ reverseArray

它返回一个数组,其中元素的顺序相反。

句法:

{ $reverseArray:  }

例:

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

$大小

大小运算符计算并返回数组中的项目总数。

句法:

{ $size:  }

例:

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

$切片

切片运算符产生数组的子集。

句法:

{ $slice: [ ,  ] }

例:

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

$ zip

zip运算符对数组进行转置,以便输出数组的第一个元素将是包含第一个输入数组的第一个元素的数组。

句法:

 {
    $zip: { inputs: [ ,  ... ], useLongestLength: , defaults:   } }

例:

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