Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$split (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo

Novidade na versão 3.4.

$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> ] }
Campo
Tipo
Descrição
string expression
string
A 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
string
O 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.

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: [ "June-15-2013", "-" ] }
[ "June", "15", "2013" ]
{ $split: [ "banana split", "a" ] }
[ "b", "n", "n", " split" ]
{ $split: [ "Hello World", " " ] }
[ "Hello", "World" ]
{ $split: [ "astronomical", "astro" ] }
[ "", "nomical" ]
{ $split: [ "pea green boat", "owl" ] }
[ "pea green boat" ]
{ $split: [ "headphone jack", 7 ] }

Erro com mensagem:

"$split requires an expression that evaluates to a string as a second argument, found: double"

{ $split: [ "headphone jack", /jack/ ] }

Erro com mensagem:

"$split requires an expression that evaluates to a string as a second argument, found: regex"

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) e city_state (array). O operador $split cria uma array de strings dividindo o campo city, usando uma vírgula seguida de um espaço (", ") como delimitador.

  • O estágio $unwind cria um registro separado para cada elemento no campo city_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 campo qty.

  • O estágio $sort classifica os resultados por total_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 }
]

Voltar

$slice