Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$first (operador de acumulación)

$first

Devuelve el resultado de una expresión para el primer documento en un grupo de documentos. Solo es significativo cuando los documentos están en un orden definido.

El acumulador $first está disponible en estas etapas:

Nota

Desambiguación

Esta página describe $first cuando se utiliza como acumulador. Los acumuladores devuelven un único valor agregado como la suma, el máximo o el mínimo en un grupo de documentos de entrada.

También puede usar $first en estos otros contextos:

{ $first: <expression> }

Para definir el orden de los documentos para $first en una etapa de agrupación, se añade una etapa $sort anterior.

En los documentos de un grupo pueden faltar campos. $first gestiona los valores ausentes de la siguiente manera:

  • Si no hay documentos de la etapa de pipeline anterior, la etapa $group no devuelve nada.

  • Si falta el campo en procesamiento por parte del acumulador de $first, $first devuelve null.

Por ejemplo, considere los siguientes documentos en la colección badData, donde a algunos documentos les faltan campos:

db.badData.insertMany( [
{ "_id": 1, "price": 6, "quantity": 6 },
{ "_id": 2, "item": "album", "price": 5, "quantity": 5 },
{ "_id": 7, "item": "tape", "price": 6, "quantity": 6 },
{ "_id": 8, "price": 5, "quantity": 5 },
{ "_id": 9, "item": "album", "price": 3, "quantity": '' },
{ "_id": 10, "item": "tape", "price": 3, "quantity": 4 },
{ "_id": 12, "item": "cd", "price": 7 }
] )

Se puede hacer un query a la colección badData, agrupando la salida en el campo item:

db.badData.aggregate( [
{ $sort: { item: 1, price: 1 } },
{
$group: {
_id: "$item",
inStock: { $first: "$quantity" }
}
}
] )

$first selecciona el primer documento de cada grupo de resultados. Los documentos a los que les falta el campo item se agrupan con un valor null para el campo _id. Cuando el campo acumulador,quantity en este ejemplo, falta, $first devuelve null.

Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si realizó alguna modificación en las bases de datos de muestra, es posible que deba descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

El siguiente ejemplo ordena las películas por año y título, luego las agrupa por género para encontrar la película más antigua estrenada en cada género:

db.movies.aggregate( [
{ $sort: { year: 1, title: 1 } },
{ $unwind: "$genres" },
{
$group: {
_id: "$genres",
firstMovieTitle: { $first: "$title" },
firstMovieYear: { $first: "$year" }
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

En el pipeline anterior:

  • $sort ordena las películas por year en orden ascendente, luego title en orden alfabético.

  • $unwind crea un documento separado para cada género en el arreglo genres, manteniendo el orden de clasificación establecido por la etapa anterior.

  • $group con $first devuelve el title y el year de la primera película (la más antigua por año, luego alfabéticamente por título) para cada género.

  • Un segundo $sort ordena los resultados alfabéticamente por género.

  • $limit restringe la salida a 5 géneros.

Califique esta página