Ler operações
Nesta página
- Visão geral
- Antes de começar
- Recuperar documentos que correspondam a uma query
- Elementos de campo da matriz de correspondência
- Recuperar todos os documentos de uma collection
- Campos de texto Atlas Search
- Modificar comportamento
- Ignorar e limitar resultados
- Classificar Resultados da Consulta
- Retornar o primeiro resultado
Visão geral
Neste guia, você pode aprender como usar o MongoDB Laravel para executar operações de localização em sua collection do MongoDB. As operações de localização permitem recuperar documentos com base nos critérios especificados.
Este guia mostra como executar as seguintes tarefas:
Antes de começar
Para executar os exemplos de código neste guia, conclua o tutorial Início Rápido . Este tutorial fornece instruções sobre como configurar uma instância do MongoDB Atlas com dados de amostra e criar os seguintes arquivos em seu aplicação web Laravel :
Movie.php
arquivo, que contém um modeloMovie
para representar documentos na coleçãomovies
MovieController.php
arquivo, que contém uma funçãoshow()
para executar operações do banco de dadosbrowse_movies.blade.php
arquivo, que contém código HTML para exibir os resultados das operações do reconhecimento de data center
As seções a seguir descrevem como editar os arquivos em seu aplicativo Laravel para executar os exemplos de código da operação e visualizar o resultado esperado.
Recuperar documentos que correspondam a uma query
Você pode usar o mapeador objeto-relacional (ORM) Eloquent do Laravel para criar modelos que representam coleções do MongoDB e métodos de cadeia neles para especificar critérios de query.
Para recuperar documentos que correspondam a um conjunto de critérios, chame o método where()
no modelo Eloquent correspondente da coleção e, em seguida, passe um filtro de query para o método.
Um filtro de query especifica os requisitos de valor do campo e instrui a operação de localização a retornar apenas documentos que atendam a esses requisitos.
Você pode utilizar uma das seguintes chamadas de método do where()
para construir uma query:
where('<field name>', <value>)
cria uma consulta que corresponde a documentos nos quais o campo de destino tem o valor exato especificadowhere('<field name>', '<comparison operator>', <value>)
cria uma query que corresponde a documentos em que o valor do campo de destino atende aos critérios de comparação
Para aplicar vários conjuntos de critérios à operação de localizar, você pode encadear uma série de métodos do where()
juntos.
Após construir sua query utilizando o método where()
, encadeie o método get()
para recuperar os resultados da query.
Este exemplo chama dois métodos where()
no modelo Movie
Eloquent para recuperar documentos que atendam aos seguintes critérios:
year
campo tem um valor de2010
imdb.rating
campo aninhado tem um valor maior que8.5
Use a seguinte sintaxe para especificar a query:
$movies = Movie::where('year', 2010) ->where('imdb.rating', '>', 8.5) ->get();
Para ver os resultados da query na exibição browse_movies
, edite a função show()
no arquivo MovieController.php
para se assemelhar ao código a seguir:
class MovieController { public function show() { $movies = Movie::where('year', 2010) ->where('imdb.rating', '>', 8.5) ->get(); return view('browse_movies', [ 'movies' => $movies ]); } }
Title: Inception Year: 2010 Runtime: 148 IMDB Rating: 8.8 IMDB Votes: 1294646 Plot: A thief who steals corporate secrets through use of dream-sharing technology is given the inverse task of planting an idea into the mind of a CEO. Title: Senna Year: 2010 Runtime: 106 IMDB Rating: 8.6 IMDB Votes: 41904 Plot: A documentary on Brazilian Formula One racing driver Ayrton Senna, who won the F1 world championship three times before his death at age 34.
Para saber como executar queries usando o construtor de queries Laravel em vez do Eloquent ORM, consulte a página Construtor de queries.
Elementos de campo da matriz de correspondência
Você pode especificar um filtro de consulta para corresponder aos elementos do campo de matriz ao recuperar documentos. Se seus documentos contiverem um campo de array , você poderá fazer a correspondência entre os documentos com base no fato de o valor contiver todos ou alguns elementos de array especificados.
Você pode usar uma das seguintes chamadas de método where()
para criar uma query em um campo de array :
where('<array field>', <array>)
cria uma query que corresponde a documentos em que o valor do campo de array é exatamente o de array especificadowhere('<array field>', 'in', <array>)
cria uma query que corresponde a documentos nos quais o valor do campo de array contém um ou mais dos elementos de array especificados
Após construir sua query utilizando o método where()
, encadeie o método get()
para recuperar os resultados da query.
Selecione a partir das seguintes abas Exact Array Match e Element Match para visualizar a sintaxe de query para cada padrão:
Este exemplo recupera documentos em que a matriz countries
é exatamente ['Indonesia', 'Canada']
:
$movies = Movie::where('countries', ['Indonesia', 'Canada']) ->get();
Este exemplo recupera documentos nos quais o array countries
contém um dos valores no array ['Canada', 'Egypt']
:
$movies = Movie::where('countries', 'in', ['Canada', 'Egypt']) ->get();
Para saber como consultar campos de array usando o construtor de query Laravel em vez do Eloquent ORM, consulte a seção Exemplo de elementos de array de correspondência no guia Construtor de query.
Recuperar todos os documentos de uma collection
Você pode recuperar todos os documento em uma collection omitindo o filtro de query. Para devolver os documentos, chame o método get()
em um modelo Eloquent que representa sua coleção. Alternativamente, você pode utilizar o alias do método get()
all()
para executar a mesma operação.
Use a seguinte sintaxe para executar uma operação de busca que corresponda a todos os documentos:
$movies = Movie::get();
Aviso
A coleção movies
no conjunto de dados de amostra do Atlas contém uma grande quantidade de dados. Recuperar e exibir todos os documentos nesta coleção pode fazer com que seu aplicativo da web expire.
Para evitar esse problema, especifique um limite de documentos usando o método take()
. Para obter mais informações sobre take()
, consulte a seção Modificar comportamento deste guia.
Campos de texto Atlas Search
Um Atlas Search de texto recupera documentos que contêm um termo ou uma frase nos campos indexados por texto. Um termo é uma sequência de caracteres que exclui caracteres de espaço em branco. Uma frase é uma sequência de termos com qualquer número de caracteres do espaço em branco.
Observação
Antes de executar uma Atlas Search de texto, você deve criar um índice de texto no campo com valor de texto. Para saber mais sobre como criar índices, consulte a seção Gerenciar índices do guia Construtor de esquemas.
Você pode executar uma Atlas Search de texto usando o operador $text seguido do campo $search
em seu filtro de query que você passa para o método where()
. O operador $text
executa uma Atlas Search de texto nos campos indexados por texto. O campo $search
especifica o texto para o Atlas Search .
Após construir sua query utilizando o método where()
, encadeie o método get()
para recuperar os resultados da query.
Este exemplo chama o método where()
no modelo Movie
Eloquent para recuperar documentos nos quais o campo plot
contém a frase "love story"
. Para executar esse Atlas Search de texto, a collection deve ter um índice de texto no campo plot
.
Use a seguinte sintaxe para especificar a query:
$movies = Movie::where('$text', ['$search' => '"love story"']) ->get();
Para ver os resultados da query na exibição browse_movies
, edite a função show()
no arquivo MovieController.php
para se assemelhar ao código a seguir:
class MovieController { public function show() { $movies = Movie::where('$text', ['$search' => '"love story"']) ->get(); return view('browse_movies', [ 'movies' => $movies ]); } }
Title: Cafè de Flore Year: 2011 Runtime: 120 IMDB Rating: 7.4 IMDB Votes: 9663 Plot: A love story between a man and woman ... Title: Paheli Year: 2005 Runtime: 140 IMDB Rating: 6.7 IMDB Votes: 8909 Plot: A folk tale - supernatural love story about a ghost ... Title: Por un puèado de besos Year: 2014 Runtime: 98 IMDB Rating: 6.1 IMDB Votes: 223 Plot: A girl. A boy. A love story ... ...
Um texto do Atlas Search atribui uma pontuação numérica de texto para indicar até que ponto cada resultado corresponde à string em seu filtro de query. Você pode classificar os resultados por relevância utilizando o método orderBy()
para classificar no campo de metadados textScore
. Você pode acessar esses metadados usando o operador $meta :
$movies = Movie::where('$text', ['$search' => '"love story"']) ->orderBy('score', ['$meta' => 'textScore']) ->get();
Dica
Para saber mais sobre o método orderBy()
, consulte a seção Classificar Resultados da Consulta deste guia.
Modificar comportamento
Você pode modificar os resultados de uma operação de localizar encadeando mais métodos para where()
.
As seguintes seções demonstram como modificar o comportamento do método where()
:
Ignorar e limitar resultados utiliza o método
skip()
para definir o número de documentos a serem ignorados e o métodotake()
para definir o número total de documentos a serem retornadosClassificar Resultados da Consulta utiliza o método
orderBy()
para retornar resultados da consulta em uma ordem especificada com base nos valores dos camposRetornar o primeiro resultado usa o método
first()
para retornar o primeiro documento que corresponde ao filtro de query
Ignorar e limitar resultados
Este exemplo query documentos nos quais o valor de year
é 1999
. A operação ignora os primeiros 2
documentos correspondentes e gera um total de 3
documentos.
Use a seguinte sintaxe para especificar a query:
$movies = Movie::where('year', 1999) ->skip(2) ->take(3) ->get();
Para ver os resultados da query na exibição browse_movies
, edite a função show()
no arquivo MovieController.php
para se assemelhar ao código a seguir:
class MovieController { public function show() { $movies = Movie::where('year', 1999) ->skip(2) ->take(3) ->get(); return view('browse_movies', [ 'movies' => $movies ]); } }
Title: Three Kings Year: 1999 Runtime: 114 IMDB Rating: 7.2 IMDB Votes: 130677 Plot: In the aftermath of the Persian Gulf War, 4 soldiers set out to steal gold that was stolen from Kuwait, but they discover people who desperately need their help. Title: Toy Story 2 Year: 1999 Runtime: 92 IMDB Rating: 7.9 IMDB Votes: 346655 Plot: When Woody is stolen by a toy collector, Buzz and his friends vow to rescue him, but Woody finds the idea of immortality in a museum tempting. Title: Beowulf Year: 1999 Runtime: 95 IMDB Rating: 4 IMDB Votes: 9296 Plot: A sci-fi update of the famous 6th Century poem. In a besieged land, Beowulf must battle against the hideous creature Grendel and his vengeance seeking mother.
Classificar Resultados da Consulta
Para ordenar resultados da query com base nos valores de campos especificados, utilize o método where()
seguido pelo método orderBy()
.
Você pode definir uma direção de classificação ascendente ou descendente nos resultados. Por padrão, o método orderBy()
define uma classificação ascendente no nome do campo fornecido, mas você pode especificar explicitamente uma classificação ascendente passando "asc"
como segundo parâmetro. Para especificar uma classificação decrescente, passe "desc"
como segundo parâmetro.
Se seus documentos contiverem valores duplicados em um campo específico, você poderá lidar com o empate especificando mais campos para classificar. Isso garante resultados consistentes se os outros campos contiverem valores únicos.
Este exemplo query documentos nos quais o valor do campo countries
contém "Indonesia"
e ordena os resultados primeiro por uma classificação crescente no campo year
e, em seguida, por uma classificação decrescente no campo title
.
Use a seguinte sintaxe para especificar a query:
$movies = Movie::where('countries', 'Indonesia') ->orderBy('year') ->orderBy('title', 'desc') ->get();
Para ver os resultados da query na exibição browse_movies
, edite a função show()
no arquivo MovieController.php
para se assemelhar ao código a seguir:
class MovieController { public function show() { $movies = Movie::where('countries', 'Indonesia') ->orderBy('year') ->orderBy('title', 'desc') ->get(); return view('browse_movies', [ 'movies' => $movies ]); } }
Title: Joni's Promise Year: 2005 Runtime: 83 IMDB Rating: 7.6 IMDB Votes: 702 Plot: A film delivery man promises ... Title: Gie Year: 2005 Runtime: 147 IMDB Rating: 7.5 IMDB Votes: 470 Plot: Soe Hok Gie is an activist who lived in the sixties ... Title: Requiem from Java Year: 2006 Runtime: 120 IMDB Rating: 6.6 IMDB Votes: 316 Plot: Setyo (Martinus Miroto) and Siti (Artika Sari Dewi) are young married couple ... ...
Dica
Para saber mais sobre classificação, consulte os seguintes recursos:
Ordem natural no glossário manual do servidor MongoDB
Ordenação, agrupamento, limite e deslocamento na documentação do Laravel
Retornar o primeiro resultado
Para recuperar o primeiro documento que corresponde a um conjunto de critérios, use o método where()
seguido pelo método first()
.
Encadeie o método orderBy()
a first()
para obter resultados consistentes ao fazer query de um valor único. Se você omitir o método orderBy()
, o MongoDB retornará os documentos correspondentes de acordo com a ordem natural dos documentos ou como eles aparecem na coleção.
Este exemplo faz uma query em documentos em que o valor do campo runtime
é 30
e retorna o primeiro documento correspondente de acordo com o valor do campo _id
.
Use a seguinte sintaxe para especificar a query:
$movie = Movie::where('runtime', 30) ->orderBy('_id') ->first();
Para ver os resultados da query na exibição browse_movies
, edite a função show()
no arquivo MovieController.php
para se assemelhar ao código a seguir:
class MovieController { public function show() { $movie = Movie::where('runtime', 30) ->orderBy('_id') ->first(); return view('browse_movies', [ 'movies' => $movie ]); } }
Title: Statues also Die Year: 1953 Runtime: 30 IMDB Rating: 7.6 IMDB Votes: 620 Plot: A documentary of black art.
Dica
Para saber mais sobre o método orderBy()
, consulte a seção Classificar Resultados da Consulta deste guia.