Retrieve Data
Overview
在本指南中,您可以学习;了解如何使用 Laravel MongoDB从MongoDB集合中检索数据。本指南介绍了可用于检索数据的 Eloquent 模型方法,并提供了不同类型查找操作的示例。
要学习;了解有关 Laravel 集成中的 Eloquent 模型的更多信息,请参阅 Eloquent 模型部分。
开始之前
要运行本指南中的代码示例,请完成快速入门教程。 本教程说明如何使用示例数据设置 MongoDB Atlas 实例,并在 Laravel Web 应用程序中创建以下文件:
Movie.php
文件,其中包含一个Movie
movies
模型来表示collection中的文档MovieController.php
文件,其中包含用于运行数据库操作的show()
函数browse_movies.blade.php
文件,其中包含用于显示数据库操作结果的 HTML 代码
以下部分介绍如何编辑 Laravel 应用程序中的文件以运行查找操作代码示例并查看预期输出。
检索与查询匹配的文档
您可以使用 Laravel 的 Eloquent 对象关系映射器 (ORM) 来创建表示 MongoDB 集合的模型,并在模型上使用链式方法来指定查询条件。
要检索与一设立条件匹配的文档,请对该集合的相应 Eloquent 模型调用where()
方法,然后向该方法传递查询过滤。
提示
Retrieve One Document
where()
方法检索所有匹配的文档。要检索第一个匹配的文档,可以链接 first()
方法。要学习;了解详情和查看示例,请参阅本指南的检索第一个结果部分。
查询筛选器指定字段值要求,并指示查找操作仅返回满足这些要求的文档。
您可以使用以下where()
方法调用之一来构建查询:
where('<field name>', <value>)
构建一个查询,用于匹配目标字段具有确切指定值的文档where('<field name>', '<comparison operator>', <value>)
构建一个查询,用于匹配目标字段值满足比较条件的文档
要将多组条件应用于查找操作,可以将一系列where()
方法链接在一起。
使用where()
方法构建查询后,链接get()
方法以检索查询结果。
此示例在Movie
Eloquent 模型上调用两个where()
方法来检索满足以下条件的文档:
year
字段的值为2010
imdb.rating
嵌套字段的值大于8.5
使用以下语法指定查询:
$movies = Movie::where('year', 2010) ->where('imdb.rating', '>', 8.5) ->get();
要在browse_movies
视图中查看查询结果,请编辑MovieController.php
文件中的show()
函数,使其类似于以下代码:
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.
要了解如何使用 Laravel 查询构建器而不是 Eloquent ORM 进行查询,请参阅查询构建器页面。
匹配数组字段元素
您可以指定查询过滤,以便在检索文档时匹配大量字段元素。 如果您的文档包含大量字段,您可以根据该值是否包含全部或部分指定大量元素来匹配文档。
您可以使用以下where()
方法调用之一对大量字段构建查询:
where('<array field>', <array>)
构建一个查询,用于匹配大量字段值与指定大量完全相同的文档where('<array field>', 'in', <array>)
构建一个查询,用于匹配大量字段值包含一个或多个指定大量元素的文档
使用where()
方法构建查询后,链接get()
方法以检索查询结果。
从以下 Exact Array Match和Element Match标签页中进行选择,以查看每个模式的查询语法:
此示例检索其中的countries
大量恰好为['Indonesia', 'Canada']
的文档:
$movies = Movie::where('countries', ['Indonesia', 'Canada']) ->get();
此示例检索countries
大量包含大量['Canada', 'Egypt']
中的某一值的文档:
$movies = Movie::where('countries', 'in', ['Canada', 'Egypt']) ->get();
要学习;了解如何使用 Laravel查询构建器而不是 Eloquent ORM 来查询大量字段,请参阅 查询构建器指南中的匹配数组元素示例部分。
检索第一个结果
要检索与一组条件匹配的第一个文档,请使用where()
方法,然后使用first()
方法。
当您查询唯一值时,将orderBy()
方法链接到first()
以获取一致的结果。 如果省略orderBy()
方法,MongoDB 将根据文档的存储顺序或它们在collection中的显示顺序返回匹配的文档。
此示例查询runtime
字段值为30
的文档,并根据_id
字段的值返回第一个匹配的文档。
使用以下语法指定查询:
$movie = Movie::where('runtime', 30) ->orderBy('_id') ->first();
要在browse_movies
视图中查看查询结果,请编辑MovieController.php
文件中的show()
函数,使其类似于以下代码:
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.
提示
要学习;了解有关 orderBy()
方法的更多信息,请参阅修改查询结果指南中的对查询结果进行排序部分。
检索collection中的所有文档
您可以通过省略查询筛选器来检索collection中的所有文档。要返回文档,请在表示collection的 Eloquent 模型上调用get()
方法。或者,您可以使用get()
方法的别名all()
来执行相同的操作。
使用以下语法运行匹配所有文档的查找操作:
$movies = Movie::get();
更多信息
要查看演示如何使用 Laravel 集成执行查找操作的可运行代码示例,请参阅以下用法示例:
要学习;了解如何将数据插入MongoDB,请参阅写入操作指南。
要学习;了解如何修改 Laravel 集成返回结果的方式,请参阅 修改查询结果 指南。