Definición
$splitDivide una cadena en una matriz de subcadenas según un delimitador.
$splitelimina el delimitador y devuelve las subcadenas resultantes como elementos de una matriz. Si no se encuentra el delimitador en la cadena,$splitdevuelve la cadena original como único elemento de una matriz.$splittiene lo siguiente Sintaxis de expresión del operador:{ $split: [ <string expression>, <delimiter> ] } CampoTipoDescripciónstring expressionstring
La cadena que se va a dividir.
string expressionpuede ser cualquier expresión válida siempre que se resuelva en una cadena. Para más información sobre expresiones, consulte Expresiones.delimiterstring
El delimitador a utilizar al dividir la expresión de cadena.
delimiterpuede ser cualquier expresión válida siempre que se resuelva en una cadena.
Comportamiento
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 | ||
|---|---|---|---|
| | ||
| | ||
| | ||
| | ||
| | ||
| Errores con el mensaje:
| ||
| Errores con el 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 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
$projectcampos:qty(entero) ycity_state(matriz). El$splitoperador crea una matriz de cadenas dividiendo elcitycampo, utilizando una coma seguida de un espacio", "() como delimitador.La etapa crea un registro separado para cada elemento en
$unwindelcity_statecampo.La
$matchetapa 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
$groupelqtycampo.La etapa ordena los resultados
$sortportotal_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 } ]