Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Gráfica de mapeo de SQL a agregación

La La canalización de agregación se corresponde con muchas operaciones de agregación SQL comunes.

La siguiente tabla compara términos, funciones y conceptos comunes de agregación SQL con sus operadores de agregación correspondientes en MongoDB:

Términos, funciones y conceptos de SQL
Operadores de agregación de MongoDB

DONDE

Agrupar por

TENIENDO

Seleccionar

ORDER BY

LIMIT

SUMA()

CONTAR()

unirse

SELECCIONAR A NEW_TABLE

INSERTAR EN TABLA

UNIR TODO

Para obtener una lista de todos los operadores de pipeline de agregación y de expresiones, consulta:

Tip

La siguiente tabla presenta una referencia rápida de las instrucciones de agregación SQL y las instrucciones correspondientes de MongoDB. Los ejemplos en la tabla asumen las siguientes condiciones:

  • Los ejemplos de SQL suponen dos tablas, orders y order_lineitem que se unen por las columnas order_lineitem.order_id y orders.id.

  • Los ejemplos de MongoDB suponen una colección orders que contiene documentos del siguiente prototipo:

    {
    cust_id: "abc123",
    ord_date: ISODate("2012-11-02T17:04:11.102Z"),
    status: 'A',
    price: 50,
    items: [ { sku: "xxx", qty: 25, price: 1 },
    { sku: "yyy", qty: 25, price: 1 } ]
    }
Ejemplo de SQL
Ejemplo de MongoDB
Descripción
SELECT COUNT(*) AS count
FROM orders
db.orders.aggregate( [
{
$group: {
_id: null,
count: { $sum: 1 }
}
}
] )

Contar todos los registros de orders

SELECT SUM(price) AS total
FROM orders
db.orders.aggregate( [
{
$group: {
_id: null,
total: { $sum: "$price" }
}
}
] )

Sumar el campo price de orders

SELECT cust_id,
SUM(price) AS total
FROM orders
GROUP BY cust_id
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
}
] )

Para cada cust_id único, sumar el campo price.

SELECT cust_id,
SUM(price) AS total
FROM orders
GROUP BY cust_id
ORDER BY total
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
},
{ $sort: { total: 1 } }
] )

Para cada cust_id único, suma el campo price, con resultados ordenados por suma.

SELECT cust_id,
ord_date,
SUM(price) AS total
FROM orders
GROUP BY cust_id,
ord_date
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: { $dateToString: {
format: "%Y-%m-%d",
date: "$ord_date"
}}
},
total: { $sum: "$price" }
}
}
] )

Para cada agrupación única de cust_id, ord_date, suma el campo price. Excluye la porción de tiempo de la fecha.

SELECT cust_id,
count(*)
FROM orders
GROUP BY cust_id
HAVING count(*) > 1
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
count: { $sum: 1 }
}
},
{ $match: { count: { $gt: 1 } } }
] )

Para cust_id con varios registros, devuelve el cust_id y el recuento de registros correspondiente.

SELECT cust_id,
ord_date,
SUM(price) AS total
FROM orders
GROUP BY cust_id,
ord_date
HAVING total > 250
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: { $dateToString: {
format: "%Y-%m-%d",
date: "$ord_date"
}}
},
total: { $sum: "$price" }
}
},
{ $match: { total: { $gt: 250 } } }
] )

Para cada agrupación única cust_id, ord_date, sume el campo price y devuelva solo cuando la suma sea mayor que 250. Excluye la parte de tiempo de la fecha.

SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
}
] )

Para cada cust_id único con estado A, sume el campo price.

SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
HAVING total > 250
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
},
{ $match: { total: { $gt: 250 } } }
] )

Para cada cust_id único con estado A, sume el campo price y devuelva solo donde la suma sea mayor a 250.

SELECT cust_id,
SUM(li.qty) as qty
FROM orders o,
order_lineitem li
WHERE li.order_id = o.id
GROUP BY cust_id
db.orders.aggregate( [
{ $unwind: "$items" },
{
$group: {
_id: "$cust_id",
qty: { $sum: "$items.qty" }
}
}
] )

Para cada cust_id único, sume los campos de la línea de artículo qty correspondientes asociados con los pedidos.

SELECT COUNT(*)
FROM (SELECT cust_id,
ord_date
FROM orders
GROUP BY cust_id,
ord_date)
as DerivedTable
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: { $dateToString: {
format: "%Y-%m-%d",
date: "$ord_date"
}}
}
}
},
{
$group: {
_id: null,
count: { $sum: 1 }
}
}
] )

Cuenta el número de agrupaciones distintas de cust_id, ord_date. Excluye la porción de tiempo de la fecha.

Volver

Variables

En esta página