MongoDB\Collection::mapReduce()
Descontinuado desde a versão 1.12.
Novidade da versão 1.2.
Definição
MongoDB\Collection::mapReduce()
O comando mapReduce permite que você execute operações de aggregation de map-reduce em uma collection.
function mapReduce( MongoDB\BSON\JavascriptInterface $map, MongoDB\BSON\JavascriptInterface $reduce, string|array|object $out, array $options = [] ): MongoDB\MapReduceResult
Parâmetros
$map
: MongoDB\BSON\JavascriptUma função JavaScript que associa ou "mapeia" um valor com uma chave e emite o par de chave e valor.
Observação
Passar uma instância JavaScript com um escopo está obsoleto. Coloque todas as variáveis de escopo na opção
scope
da operação MapReduce.$reduce
: MongoDB\BSON\JavascriptUma função JavaScript que "reduz" a um único objeto todos os valores associados a uma chave específica.
Observação
Passar uma instância JavaScript com um escopo está obsoleto. Coloque todas as variáveis de escopo na opção
scope
da operação MapReduce.$out
: string|array|objeto- Especifica onde produzir o resultado da operação map-reduce. Você pode gerar saída para uma collection ou retornar o resultado in-line. Em um membro primário de um conjunto de réplicas, você pode gerar saída para uma collection ou in-line, mas em um secundário, somente a saída in-line é possível.
$options
: arrayUma array especificando as opções desejadas.
NomeTipoDescriçãobypassDocumentValidation
booleano
Se
true
, permite que a operação de gravação contorne a validação do nível do documento. O padrão éfalse
.Isso só se aplica quando os resultados são enviados para uma collection.
agrupamento
array|object
A colocação permite que os usuários especifiquem regras específicas do idioma para comparação de string , como regras para letras maiúsculas e marcas de acento. Ao especificar agrupamento, o campo
locale
é obrigatório; todos os outros campos de agrupamento são opcionais. Para obter descrições dos campos, consulte Documento de agrupamento.Se o agrupamento não for especificado, mas a coleção tiver um agrupamento padrão, a operação usará o agrupamento especificado para a coleção. Se nenhum agrupamento for especificado para a coleção nem para a operação, o MongoDB usará a comparação binária simples usada nas versões anteriores para comparações de strings.
comment
misto
Permite ao usuário especificar um comentário arbitrário para ajudar a rastrear a operação por meio do profiler de banco de dados, da saída currentOp e dos registros.
Esta opção está disponível desde o MongoDB 4.4 e resultará em uma exceção no momento da execução se for especificada para uma versão mais antiga do servidor.
Novidade na versão 1.13.
finalizar
Segue o método de redução e modifica a saída.
Passar uma instância JavaScript com um escopo está obsoleto. Coloque todas as variáveis de escopo na opção
scope
da operação MapReduce.jsMode
booleano
Especifica se serão convertidos dados intermediários em formato BSON entre a execução do mapa e funções de redução.
limit
inteiro
Especifica um número máximo de documentos para a entrada na função de mapa.
maxTimeMS
inteiro
O limite de tempo cumulativo em milésimos de segundo para operações de processamento no cursor. O MongoDB aborta a operação o mais cedo possível após o ponto de interrupção.
Query
array|object
Especifica os critérios de seleção utilizando operadores de query para determinar a entrada de documentos para a função de mapa.
readConcern
Preocupação de leitura a ser usada para a operação. O padrão é a preocupação de leitura da coleção.
Não é possível especificar uma preocupação de leitura para operações individuais como parte de uma transação. Em vez disso, defina a opção
readConcern
ao iniciar a transação.readPreference
Preferência de leitura a ser usada na operação. O padrão é a preferência de leitura da coleção.
Esta opção será ignorada quando os resultados forem enviados para uma collection.
escopo
array|object
Especifica variáveis globais que são acessíveis nas funções de map-reduce e finalizar.
session
Sessão do cliente a ser associada à operação.
Novidade na versão 1.3.
sort
array|object
A especificação de classificação para a ordenação dos resultados.
typeMap
array
O mapa de tipos para aplicar aos cursores, que determina como os documentos BSON são convertidos para valores PHP. O padrão é o mapa de tipos da coleção.
verbose
booleano
Especifica se as informações de tempo devem ser incluídas nas informações do resultado.
writeConcern
Preocupação de gravação a ser usada na operação. O padrão é a preocupação de gravação da coleção.
Não é possível especificar uma preocupação de gravação para operações individuais como parte de uma transação. Em vez disso, defina a opção
writeConcern
ao iniciar a transação.
Return Values
Um objeto MongoDB\MapReduceResult
, que permite a iteração dos resultados de map-reduce, independentemente do método de saída (por exemplo, inline, collection) por meio do método IteratorAggregate interface. Ele também fornece acesso a estatísticas de comando.
Erros/exceções
MongoDB\Exception\UnsupportedException
se as opções forem usadas e não aceitas pelo servidor selecionado (p. ex., collation
, readConcern
, writeConcern
).
MongoDB\Exception\InvalidArgumentException
para erros relacionados à análise de parâmetros ou opções.
MongoDB\Exception\UnexpectedValueException
se a resposta do comando do servidor estiver malformada.
MongoDB\Driver\Exception\RuntimeException para outros erros no nível da extensão (por exemplo erros de conexão).
Comportamento
No MongoDB, a operação de map-reduce pode gravar resultados em uma collection ou retornar os resultados embutidos. Se você gravar a saída de map-reduce em uma collection, poderá executar operações subsequentes de map-reduce na mesma collection de entrada que mesclam, substituem, mesclam ou reduzem novos resultados com resultados anteriores. Consulte Redução de mapa e Executar redução de mapa incremental para detalhes e exemplos.
Ao retornar os resultados de uma operação de map-reduce em linha, os documentos resultantes devem estar dentro do limite de tamanho do documento BSON , que atualmente é 16 megabytes.
O MongoDB oferece suporte a operações de redução de mapa em coleções fragmentadas. As operações de redução de mapa também podem gerar resultados para uma coleção fragmentada. Consulte redução de mapa e coleções fragmentadas.
Exemplo
Este exemplo utilizará as populações da cidade para calcular a população geral de cada estado.
$collection = (new MongoDB\Client)->test->zips; $map = new MongoDB\BSON\Javascript('function() { emit(this.state, this.pop); }'); $reduce = new MongoDB\BSON\Javascript('function(key, values) { return Array.sum(values) }'); $out = ['inline' => 1]; $populations = $collection->mapReduce($map, $reduce, $out); foreach ($populations as $pop) { var_dump($pop); };
A saída seria então semelhante a:
object(stdClass)#2293 (2) { ["_id"]=> string(2) "AK" ["value"]=> float(544698) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AL" ["value"]=> float(4040587) } object(stdClass)#2293 (2) { ["_id"]=> string(2) "AR" ["value"]=> float(2350725) } object(stdClass)#2300 (2) { ["_id"]=> string(2) "AZ" ["value"]=> float(3665228) }