Definición
$splitDivide una cadena en un arreglo de subcadenas según un delimitador, que puede ser una string o un patrón regex.
$splitelimina el delimitador y devuelve las subcadenas resultantes como elementos de un arreglo. Si el delimitador no se encuentra en la string,$splitdevuelve la string original como el único elemento de un arreglo.$splittiene lo siguiente Sintaxis de expresión de operador:{ $split: [ <string expression>, <delimiter> ] } CampoTipoDescripciónstring expressionstring
La string que se va a dividir.
string expressionpuede ser cualquier expresión válida, siempre que se resuelva en una string. Para obtener más información sobre expresiones, consulte Expresiones.delimiterstring
El delimitador a utilizar al dividir la expresión del string.
delimiterpuede ser cualquier expresión válida, siempre que se resuelva en un string o un patrón de expresión regular.
Comportamiento
La $split el operador devuelve un arreglo. La <string expression> input debe ser una string y la <delimiter> input debe ser una string o un patrón regex. De lo contrario, la operación falla con un error.
Ejemplo | Resultados | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| Errores con mensaje:
|
Ejemplo
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 encontrar la cantidad total de entregas por estado y ordenar la lista en orden descendente. Tiene cinco etapas de pipeline:
La etapa
$projectproduce documentos con dos campos,qty(entero) ycity_state(arreglo). El operador$splitcrea un arreglo de cadenas dividiendo el campocity, usando una coma seguida de un espacio (", ") como delimitador.La etapa
$unwindcrea un registro separado para cada elemento en el campocity_state.La etapa
$matchutiliza una expresión regular para filtrar los documentos de la ciudad, dejando solo aquellos que contienen un estado.La etapa
$groupagrupa todos los estados juntos y suma el campoqty.La etapa
$sortordena los resultados portotal_qtyen 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 } ]