Overview
En esta guía, puedes aprender cómo recuperar datos de colecciones de MongoDB usando Laravel MongoDB. Esta guía describe los métodos de modelos Eloquent que puedes usar para recuperar datos y proporciona ejemplos de diferentes tipos de operaciones de búsqueda.
Para obtener más información sobre los modelos Eloquent en la Integración de Laravel, consulta la Sección Eloquent Models.
Antes de comenzar
Para ejecutar los ejemplos de código en esta guía, completa el tutorial de Inicio Rápido. Este tutorial proporciona instrucciones para configurar una instancia de MongoDB Atlas con datos de muestra y crear los siguientes archivos en su aplicación web Laravel:
Movie.phparchivo, que contiene un modeloMoviepara representar documentos en la colecciónmoviesMovieController.phparchivo, que contiene una funciónshow()para ejecutar operaciones de base de datosbrowse_movies.blade.phparchivo, que contiene código HTML para mostrar los resultados de las operaciones de la base de datos
Las siguientes secciones describen cómo editar los archivos de tu aplicación Laravel para ejecutar los ejemplos de código de operaciones de búsqueda y ver la salida esperada.
Recuperar documentos que coincidan con una query
Puedes utilizar el mapeador objeto-relacional (ORM) Eloquent de Laravel para crear modelos que representen las colecciones MongoDB y encadenar métodos sobre ellos para especificar criterios de query.
Para recuperar documentos que coincidan con un conjunto de criterios, llama al método where() en el modelo Eloquent correspondiente de la colección y luego pasa un filtro de query al método.
Tip
Retrieve One Document
El método where() recupera todos los documentos coincidentes. Para recuperar el primer documento que coincida, puedes encadenar el método first(). Para obtener más información y ver un ejemplo, consulte Recuperar el Primer Resultado sección de esta guía.
Un filtro de query especifica los requisitos de valor de campo e instruye a la operación de búsqueda para que devuelva solo los documentos que cumplan con estos requisitos.
Puede usar una de las siguientes where() llamadas de método para compilar una query:
where('<field name>', <value>)compila una query que coincida con documentos en los que el campo objetivo tenga el valor exacto especificadowhere('<field name>', '<comparison operator>', <value>)compila una query que coincida con documentos en los que el valor del campo objetivo cumpla con los criterios de comparación
Para aplicar múltiples conjuntos de criterios a la operación de búsqueda, se puede encadenar una serie de métodos where() juntos.
Después de crear tu query utilizando el método where(), encadena el método get() para recuperar los resultados de la query.
Este ejemplo invoca dos métodos where() en el modelo Eloquent Movie para recuperar documentos que cumplan los siguientes criterios:
yearel campo tiene un valor de2010imdb.ratingel campo anidado tiene un valor superior a8.5
Utilice la siguiente sintaxis para especificar la query:
$movies = Movie::where('year', 2010) ->where('imdb.rating', '>', 8.5) ->get();
Para ver los resultados de la query en la vista browse_movies, edita la función show() en el archivo MovieController.php para que se asemeje al siguiente código:
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 aprender a usar el generador de query de Laravel en lugar del ORM Eloquent, consulta la página de Generador de query.
Coincidir elementos del campo de arreglo
Puedes especificar un filtro de query para hacer coincidir elementos de campos de arreglo al recuperar documentos. Si tus documentos contienen un campo de arreglo, puedes hacer coincidir documentos dependiendo de si el valor contiene todos o algunos de los elementos de arreglo especificados.
Puedes utilizar una de las siguientes llamadas al método where() para compilar una query en un campo de arreglo:
where('<array field>', <array>)compila una query que coincide con los documentos en los que el valor del campo de arreglo es exactamente el arreglo especificadowhere('<array field>', 'in', <array>)construye una consulta que coincide con documentos en los que el valor del campo de matriz contiene uno o más de los elementos de matriz especificados
Después de crear tu query utilizando el método where(), encadena el método get() para recuperar los resultados de la query.
Seleccione de lo siguiente Exact Array Match y Element Match pestañas para ver la sintaxis de query de cada patrón:
Este ejemplo recupera los documentos en los que el arreglo countries es exactamente ['Indonesia', 'Canada']:
$movies = Movie::where('countries', ['Indonesia', 'Canada']) ->get();
Este ejemplo recupera documentos en los que el arreglo countries contiene uno de los valores del arreglo ['Canada', 'Egypt']:
$movies = Movie::where('countries', 'in', ['Canada', 'Egypt']) ->get();
Aprende a consultar campos de arreglos usando el query builder de Laravel en lugar del ORM Eloquent, consulta la sección Ejemplo de coincidencia de elementos de arreglo en la guía del query builder.
Recupera el primer resultado
Para recuperar el primer documento que cumpla un conjunto de criterios, utiliza el método where() seguido del método first().
Encadena el método orderBy() a first() para obtener resultados consistentes cuando consultes query sobre un valor único. Si omites el método orderBy(), MongoDB devuelve los documentos coincidentes según el orden natural de los documentos o como aparecen en la colección.
Este ejemplo realiza una consulta de documentos en los que el valor del campo runtime es 30 y devuelve el primer documento coincidente según el valor del campo _id.
Utilice la siguiente sintaxis para especificar la query:
$movie = Movie::where('runtime', 30) ->orderBy('_id') ->first();
Para ver los resultados de la query en la vista browse_movies, edita la función show() en el archivo MovieController.php para que se asemeje al siguiente código:
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.
Tip
Para obtener más información sobre el método orderBy(), consulta la sección Ordenar resultados de query de la guía Modificar resultados de query.
Recuperar todos los documentos en una colección
Puedes recuperar todos los documentos de una colección omitiendo el filtro de query. Para devolver los documentos, llama al método get() en un modelo Eloquent que represente tu colección. De manera alternativa, puedes emplear el alias all() del método get() para llevar a cabo la misma operación.
Utiliza la siguiente sintaxis para ejecutar una operación de búsqueda que coincida con todos los documentos:
$movies = Movie::get();
Advertencia
La colección movies en el conjunto de datos de muestra Atlas contiene una gran cantidad de datos. Recuperar y mostrar todos los documentos de esta colección podría provocar que tu aplicación web se quede sin tiempo.
Para evitar este problema, especifica un límite de documentos utilizando el método take(). Para obtener más información sobre take(), consulta la sección Modificar los resultados de las consultas de la guía Modificar salida de la consulta.
Información Adicional
Para ver ejemplos de código ejecutables que demuestren cómo realizar operaciones de búsqueda utilizando la integración de Laravel, consulta los siguientes ejemplos de uso:
Para aprender a insertar datos en MongoDB, consulta la guía de Operaciones de escritura.
Para aprender cómo modificar la forma en que la integración de Laravel devuelve resultados, consulta la guía Modificar resultados de query.