Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$split (agregación)

$split

Divide una cadena en una matriz de subcadenas según un delimitador. $split elimina el delimitador y devuelve las subcadenas resultantes como elementos de una matriz. Si no se encuentra el delimitador en la cadena, $split devuelve la cadena original como único elemento de una matriz.

$split tiene lo siguiente Sintaxis de expresión del operador:

{ $split: [ <string expression>, <delimiter> ] }
Campo
Tipo
Descripción

string expression

string

La cadena que se va a dividir. string expression puede ser cualquier expresión válida siempre que se resuelva en una cadena. Para más información sobre expresiones, consulte Expresiones.

delimiter

string

El delimitador a utilizar al dividir la expresión de cadena. delimiter puede ser cualquier expresión válida siempre que se resuelva en una cadena.

El operador devuelve una matriz.$split Las <string expression> <delimiter> entradas y deben ser cadenas. De lo contrario, la operación falla con un error.

Ejemplo
Resultados
{ $split: [ "June-15-2013", "-" ] }
[ "June", "15", "2013" ]
{ $split: [ "banana split", "a" ] }
[ "b", "n", "n", " split" ]
{ $split: [ "Hello World", " " ] }
[ "Hello", "World" ]
{ $split: [ "astronomical", "astro" ] }
[ "", "nomical" ]
{ $split: [ "pea green boat", "owl" ] }
[ "pea green boat" ]

{ $split: [ "headphone jack", 7 ] }

Errores con el mensaje:

"$split requires an expression that evaluates to a string as a second argument, found: double"

{ $split: [ "headphone jack", /jack/ ] }

Errores con el mensaje:

"$split requires an expression that evaluates to a string as a second argument, found: regex"

Una colección llamada deliveries contiene los siguientes documentos:

db.deliveries.insertMany( [
{ _id: 1, city: "Berkeley, CA", qty: 648 },
{ _id: 2, city: "Bend, OR", qty: 491 },
{ _id: 3, city: "Kensington, CA", qty: 233 },
{ _id: 4, city: "Eugene, OR", qty: 842 },
{ _id: 5, city: "Reno, NV", qty: 655 },
{ _id: 6, city: "Portland, OR", qty: 408 },
{ _id: 7, city: "Sacramento, CA", qty: 574 }
] )

El objetivo de la siguiente operación de agregación es determinar la cantidad total de entregas de cada estado y ordenar la lista en orden descendente. Consta de cinco etapas:

  • La etapa genera documentos con dos $project campos: qty (entero) y city_state (matriz). El $split operador crea una matriz de cadenas dividiendo el city campo, utilizando una coma seguida de un espacio", " () como delimitador.

  • La etapa crea un registro separado para cada elemento en $unwind el city_state campo.

  • La $match etapa utiliza una expresión regular para filtrar los documentos de la ciudad, dejando solo aquellos que contienen un estado.

  • La etapa agrupa todos los estados y suma $group el qty campo.

  • La etapa ordena los resultados $sort por total_qty en orden descendente.

db.deliveries.aggregate( [
{ $project: { city_state: { $split: ["$city", ", "] }, qty: 1 } },
{ $unwind: "$city_state" },
{ $match: { city_state: /[A-Z]{2}/ } },
{ $group: { _id: { state: "$city_state" }, total_qty: { $sum: "$qty" } } },
{ $sort: { total_qty: -1 } }
] )

La operación devuelve los siguientes resultados:

[
{ _id: { state: "OR" }, total_qty: 1741 },
{ _id: { state: "CA" }, total_qty: 1455 },
{ _id: { state: "NV" }, total_qty: 655 }
]

Volver

$sortArray

En esta página