Skip to content

Latest commit

 

History

History
574 lines (452 loc) · 8.22 KB

File metadata and controls

574 lines (452 loc) · 8.22 KB

MongoDB Aggregation Cheat Sheet

Sumário


Operadores

Operadores Aggregation

$match

Template

db.collection.aggregate([
  { $match: { <query> } },
]);

Exemplo

db.workers.aggregate([
  { $match: { workerName: "Tiago" } },
]);

Documentação

Voltar para Sumário


$limit

Template

db.collection.aggregate([
  { $limit: <inteiro positivo> },
]);

Exemplo

db.products.aggregate([
	{ $match: { laptop: 'Dell' } },
    { $limit: 5 },
]);

Documentação

Voltar para Sumário


$group

Template

db.collection.aggregate([
	{
		$group: {
		  _id: <expressão>,
			<campo1>: { <acumulador1> : <expressão1> },
			...
			<campoN>: { <acumuladorN> : <expressãoN> },
		},
	},
]);

Exemplo

db.products.aggregate([
  {
    $group : {
      _id : "$laptopId",
      count: { $sum: 1 },
    },
  },
]);

Documentação

Voltar para Sumário


$project

Template

db.collection.aggregate([
  {
    project: {
      <especificação(ões)>
    },
  },
]);

Exemplo

db.products.aggregate([
  {
    $project: {
      _id: 0, // ou false
      productName: "$laptop",
      quantity: 1, // ou true
      profit: {
        $subtract: ["$sale_price", "$cost_price"]
      },
    },
  },
]);

Documentação

Voltar para Sumário


$unwind

Template

db.collection.aggregate([
  { $unwind: <caminho do campo array> },
]);

Exemplo

db.streamings.aggregate([
  { $unwind: "$netflix_plans" },
]);

Documentação

Voltar para Sumário


$lookup

Template

db.collection.aggregate([
	{
    $lookup: {
      from: <coleção para unir>,
      localField: <campo dos documentos de entrada>,
      foreignField: <campo dos documentos provenientes da coleção conectada,
      as: <campo do array de saída>
    },
  },
]);

Exemplo

db.orders.aggregate([
	{
    $lookup: {
      from: "inventory",
      localField: "item",
      foreignField: "sku",
      as: "inventory_docs"
    },
  },
]);

Documentação

Voltar para Sumário


$lookup (let/pipeline)

Template

db.collection.aggregate([
  {
   $lookup:
     {
       from: <coleção para unir>,
       let: { <var_1>: <expressão>, …, <var_n>: <expressão> },
       pipeline: [ <pipeline a ser executada na coleção unida> ],
       as: <campo do array de saída>
     }
}
]);

Exemplo

db.orders.aggregate([
   {
      $lookup:
         {
           from: "warehouses",
           let: { order_item: "$item", order_qty: "$ordered" },
           pipeline: [
              { $match:
                 { $expr:
                    { $and:
                       [
                         { $eq: [ "$stock_item",  "$$order_item" ] },
                         { $gte: [ "$instock", "$$order_qty" ] }
                       ]
                    }
                 }
              },
              { $project: { stock_item: 0, _id: 0 } }
           ],
           as: "stockdata"
         }
    }
])

Documentação

Voltar para Sumário


$addFields

Template

db.collection.aggregate([
  {
    $addFields: {
      <novoCampo1>: <valor> ,
      <novoCampo2>: <valor> ,
      ...
    },
  },
]);

Exemplo

db.school.aggregate([
  {
    $addFields: {
      totalHomework: { $sum: "$homework" } ,
      totalQuiz: { $sum: "$quiz" }
    },
  },
  {
    $addFields: {
      totalScore: {
        $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ]
      },
    },
  },
]);

Documentação

Voltar para Sumário

Operadores Aritméticos

$add

Template

db.collection.aggregate([
  {
    $project: {
      <campo>: {
        $add: [ <expressão1>, <expressão2>, ... ] 
      },
    },
  },
]);

Exemplo

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

Documentação

Voltar para Sumário


$subtract

Template

db.collection.aggregate([
  {
    $project: {
      <campo>: {
        $subtract: [
          <expression1>,
          <expression2>
        ]
      },
    },
  },
]);

Exemplo

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

Documentação

Voltar para Sumário


$ceil

Template

db.collection.aggregate([
  {
    $project: {
      roundedNumber: {
        $ceil: <numero>,
      },
    },
  },
]);

Exemplo

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

Documentação

Voltar para Sumário


$floor

Template

db.collection.aggregate([
  {
    $project: {
      value: 1,
      roundedNumber: {
        $floor: <numero>,
      },
    },
  },
]);

Exemplo

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

Documentação

Voltar para Sumário


$abs

Template

db.collection.aggregate([
  {
    project: {
      <campo>: {
        abs: <numero>,
      },
    },
  },
]);

Exemplo

db.operations.aggregate([
  {
    project: {
      delta: {
        abs: { $subtract: ["$start", "$end"] },
      },
    },
  },
]);

Documentação

Voltar para Sumário


$multiply

Template

db.collection.aggregate([
  {
    project: {
      <campo>: {
        $multiply: [ <expressão1>, <expressão2>, ... ]
      },
    },
  },
]);

Exemplo

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

Documentação

Voltar para Sumário


$divide

Template

db.collection.aggregate([
  {
    project: {
      <campo>: {
        $divide: [ <expressão1>, <expressão2> ]
      },
    },
  },
]);

Exemplo

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

Documentação

Voltar para Sumário