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çãobypassDocumentValidationbooleanoSe
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.
agrupamentoarray|objectA 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.
comentáriomistoPermite 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.
finalizarSegue 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.jsModebooleanoEspecifica se serão convertidos dados intermediários em formato BSON entre a execução do mapa e funções de redução.limiteinteiroEspecifica um número máximo de documentos para a entrada na função de mapa.maxTimeMSinteiroO 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.
Queryarray|objectEspecifica os critérios de seleção utilizando operadores de query para determinar a entrada de documentos para a função de mapa.readConcernPreocupaçã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.readPreferencePreferê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.
escopoarray|objectEspecifica variáveis globais que são acessíveis nas funções de map-reduce e finalizar.sessionSessão do cliente a ser associada à operação.
Novidade na versão 1.3.
espéciearray|objectA especificação de classificação para a ordenação dos resultados.typeMaparrayO 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.
verbosobooleanoEspecifica se as informações de tempo devem ser incluídas nas informações do resultado.Escreva preocupaçãoPreocupaçã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.
Valores de retorno
Um MongoDB\MapReduceResult
objeto , que permite a iteração dos resultados de redução de mapa, independentemente do método de saída (por exemplo, in-line, 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 redução de mapa pode gravar resultados em uma collection ou retornar os resultados embutidos. Se você gravar a saída de redução de mapa em uma collection, poderá executar operações subsequentes de redução de mapa 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 redução de mapa 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) }