Definición
$splitDivide una string en un arreglo de subcadenas según un delimitador.
$splitremueve 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 que se debe usar al dividir la expresión de string.
delimiterpuede ser cualquier expresión válida, siempre y cuando se resuelva en una string.
Comportamiento
La El operador $split devuelve un arreglo. Las entradas <string expression> y <delimiter> deben ser ambas cadenas de texto. De lo contrario, la operación falla con un error.
Ejemplo | Resultados | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| Errores con mensaje:
| ||
| 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 } ]