$split (agregação)
Nesta página
Novidade na versão 3.4.
Definição
$split
Divide uma string em uma array de substrings com base em um delimitador.
$split
remove o delimitador e retorna as substrings resultantes como elementos de uma array. Se o delimitador não for encontrado na string,$split
retornará a string original como o único elemento de uma array.$split
tem a seguintesintaxe de expressão do operador :{ $split: [ <string expression>, <delimiter> ] } CampoTipoDescriçãostring expression
stringA string a ser dividida.string expression
pode ser qualquer expressão válida desde que resolva para uma string. Para mais informações sobre expressões, consulte Expressões.delimiter
stringO delimitador a ser usado ao dividir a expressão de string.delimiter
pode ser qualquer expressão válida desde que resolva para uma string.
Comportamento
O operador $split
retorna uma array. As entradas <string expression>
e <delimiter>
devem ser ambas strings. Caso contrário, a operação falha com um erro.
Exemplo | Resultados | ||
---|---|---|---|
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
{ $split: [ "headphone jack", 7 ] } | Erro com mensagem:
| ||
{ $split: [ "headphone jack", /jack/ ] } | Erro com mensagem:
|
Exemplo
Uma coleção chamada deliveries
contém os seguintes 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 } ] )
O objetivo da operação de aggregation a seguir é encontrar a quantidade total de entregas para cada estado e colocar a lista em ordem decrescente. Possui cinco estágios de pipeline:
O estágio
$project
produz documentos com dois campos,qty
(inteiro) ecity_state
(array). O operador$split
cria uma array de strings dividindo o campocity
, usando uma vírgula seguida de um espaço (", "
) como delimitador.O estágio
$unwind
cria um registro separado para cada elemento no campocity_state
.O estágio
$match
utiliza uma expressão regular para filtrar os documentos da cidade, deixando somente aqueles que contêm um estado.O estágio
$group
agrupa todos os estados e resume o campoqty
.O estágio
$sort
classifica os resultados portotal_qty
em ordem decrescente.
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 } } ] )
A operação retorna os seguintes resultados:
[ { _id: { state: "OR" }, total_qty: 1741 }, { _id: { state: "CA" }, total_qty: 1455 }, { _id: { state: "NV" }, total_qty: 655 } ]