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ónModelos Elocuentes.
Antes de empezar
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 coinciden con una consulta
Puede utilizar el mapeador relacional de objetos Eloquent (ORM) de Laravel para crear modelos que representen colecciones de MongoDB y encadenar métodos en ellos para especificar criterios de consulta.
Para recuperar documentos que coincidan con un conjunto de criterios, llame al método where() en el modelo Eloquent correspondiente de la colección y luego pase un filtro de consulta al método.
Tip
Retrieve One Document
El método where() recupera todos los documentos coincidentes. Para recuperar el primer documento coincidente, puede encadenar el método first(). Para obtener más información y ver un ejemplo, consulte Recupere la sección Primer Resultado 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>)crea una consulta que coincide con los documentos en los que el campo de destino tiene el valor exacto especificadowhere('<field name>', '<comparison operator>', <value>)crea una consulta que coincide con los documentos en los que el valor del campo de destino cumple 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 su consulta utilizando el método where(), encadene el método get() para recuperar los resultados de la consulta.
Este ejemplo llama a dos métodos where() en el modelo Eloquent Movie para recuperar documentos que cumplen 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>)Crea una consulta que coincide con los documentos en los que el valor del campo de la matriz es exactamente el de la matriz especificada.where('<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 su consulta utilizando el método where(), encadene el método get() para recuperar los resultados de la consulta.
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.
Recuperar el primer resultado
Para recuperar el primer documento que cumpla un conjunto de criterios, utiliza el método where() seguido del método first().
Encadene el método orderBy() a first() para obtener resultados consistentes al consultar un valor único. Si omite el método orderBy(), MongoDB devuelve los documentos coincidentes según su orden natural 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.
Utilice 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 demuestran cómo realizar operaciones de búsqueda mediante la integración de Laravel, consulte 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, consulte la guía Modificar resultados de consulta.