对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

Retrieve MongoDB Data

在本指南中,您可以学习;了解如何使用 Laravel MongoDB从MongoDB集合中检索数据。本指南介绍了可用于检索数据的 Eloquent 模型方法,并提供了不同类型查找操作的示例。

要学习有关 Laravel 集成中 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
]);
}
}

要了解如何使用 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
]);
}
}

提示

要学习;了解有关 orderBy() 方法的更多信息,请参阅修改查询结果指南中的对查询结果进行排序部分。

您可以通过省略查询筛选器来检索collection中的所有文档。要返回文档,请在表示collection的 Eloquent 模型上调用get()方法。或者,您可以使用get()方法的别名all()来执行相同的操作。

使用以下语法运行匹配所有文档的查找操作:

$movies = Movie::get();

警告

Atlas样本数据集中的moviescollection包含大量数据。检索并显示此collection中的所有文档可能会导致 Web 应用程序超时。

要避免此问题,请使用 take() 方法指定文档限制。take()有关 的更多信息,请参阅“修改查询输出”指南中的“修改查询结果”部分。

以下部分提供可完全运行的代码示例,展示如何使用 Laravel 集成来检索文档。这些示例使用 Atlas 示例数据集 中的 sample_mflix.movies 集合。

提示

您可以从自己的 Laravel 应用程序或从开始使用教程中创建的 my-app 应用程序运行完整示例。这些示例使用此教程中创建的 Movie.php 模型类来演示 movies MongoDB 集合上的操作。要运行该操作,可以将示例代码复制到 Laravel 应用程序中的控制器终结点。

要查看操作的预期输出,您可以将 Web 路由添加到应用程序,该应用程序调用控制器函数并将结果返回到 Web 界面。

从以下 Eloquent 和 Query Builder 标签页中选择,查看每个相应查询语法的示例:

此示例将执行以下动作:

  • 使用Movie Eloquent 模型表示sample_mflix数据库中的movies集合

  • 从movies集合中检索与查询筛选器匹配的文档

  • 打印检索到的文档

该示例在Movie模型上调用以下方法:

  • where():匹配其中 directors字段的值包含 "Rob Reiner" 的文档

  • orderBy():按 _id 值升序对匹配的文档进行排序

  • first():仅检索第一个匹配的文档

$movie = Movie::where('directors', 'Rob Reiner')
->orderBy('id')
->first();
echo $movie->toJson();

此示例将执行以下动作:

  • 通过从 DB 门面调用 table() 方法来访问 movies集合

  • 从movies集合中检索与查询筛选器匹配的文档

  • 打印检索到的文档的 title字段

该示例调用以下查询构建器方法:

  • where():匹配其中 directors字段的值包含 "Rob Reiner" 的文档

  • orderBy():按 _id 值升序对匹配的文档进行排序

  • first():仅检索第一个匹配的文档

$movie = DB::table('movies')
->where('directors', 'Rob Reiner')
->orderBy('_id')
->first();
echo $movie->title;

从以下 Eloquent 和 Query Builder 标签页中选择,查看每个相应查询语法的示例:

此示例将执行以下动作:

  • 使用Movie Eloquent 模型表示sample_mflix数据库中的movies集合

  • 从movies集合中检索并打印与查询筛选器匹配的文档

该示例在Movie模型上调用以下方法:

  • where():匹配 runtime字段的值大于 900 的文档

  • orderBy():按 _id 值升序对匹配的文档进行排序

  • get():以 Laravel集合对象的形式检索查询结果

$movies = Movie::where('runtime', '>', 900)
->orderBy('id')
->get();

此示例将执行以下动作:

  • 通过从 DB 门面调用 table() 方法来访问 movies集合

  • 从movies集合中检索并打印与查询筛选器匹配的文档

该示例调用以下查询构建器方法:

  • where():匹配 runtime字段的值大于 900 的文档

  • orderBy():按 _id 值升序对匹配的文档进行排序

  • get():以 Laravel集合对象的形式检索查询结果

$movies = DB::table('movies')
->where('runtime', '>', 900)
->orderBy('_id')
->get();

从以下 Eloquent 和 Query Builder 标签页中选择,查看每个相应查询语法的示例:

此示例将执行以下动作:

  • 使用Movie Eloquent 模型表示sample_mflix数据库中的movies集合

  • 计算movies集合中与查询过滤匹配的文档数量

  • 打印匹配的文档计数

该示例在Movie模型上调用以下方法:

  • where():匹配其中 genres字段的值包含 "Biography" 的文档

  • count():计算匹配文档的数量,并以整数形式返回计数

$count = Movie::where('genres', 'Biography')
->count();
echo 'Number of documents: ' . $count;

此示例将执行以下动作:

  • 通过从 DB 门面调用 table() 方法来访问 movies集合

  • 计算movies集合中与查询过滤匹配的文档数量

  • 打印匹配的文档计数

该示例调用以下查询构建器方法:

  • where():匹配其中 genres字段的值包含 "Biography" 的文档

  • count():计算匹配文档的数量,并以整数形式返回计数

$count = DB::table('movies')
->where('genres', 'Biography')
->count();
echo 'Number of documents: ' . $count;

从以下 Eloquent 和 Query Builder 标签页中选择,查看每个相应查询语法的示例:

此示例将执行以下动作:

  • 使用Movie Eloquent 模型表示sample_mflix数据库中的movies集合

  • 从movies集合中检索与查询筛选器匹配的文档的不同字段值

  • 打印非重复值

该示例在Movie模型上调用以下方法:

  • where():匹配其中 directors字段的值包含 "Sofia Coppola" 的文档

  • select():检索匹配文档的 imdb.rating字段值

  • distinct():检索所选字段的唯一值并返回值列表

  • get():检索查询结果

$ratings = Movie::where('directors', 'Sofia Coppola')
->select('imdb.rating')
->distinct()
->get();
echo $ratings;

此示例将执行以下动作:

  • 通过从 DB 门面调用 table() 方法来访问 movies集合

  • 从movies集合中检索与查询筛选器匹配的文档的不同字段值

  • 打印非重复值

该示例调用以下查询构建器方法:

  • where():匹配其中 directors字段的值包含 "Sofia Coppola" 的文档

  • select():检索匹配文档的 imdb.rating字段值

  • distinct():检索所选字段的唯一值并返回值列表

  • get():检索查询结果

$ratings = DB::table('movies')
->where('directors', 'Sofia Coppola')
->select('imdb.rating')
->distinct()
->get();
echo $ratings;

要了解如何将数据插入 MongoDB,请参阅插入文档指南。

要学习;了解如何修改 Laravel 集成返回结果的方式,请参阅 修改查询结果 指南。