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 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 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 $split El operador devuelve una matriz. Las <string expression> <delimiter> entradas y deben ser cadenas. 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 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 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 } ]