对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

读取文档

在 MongoDB 中,读取操作包括查询数据库。此页面提供示例。

您可以使用以下方法在MongoDB中查询文档:


➤ 使用右上角的 Select your language(选择语言)下拉菜单,设置以下示例的语言或选择 MongoDB Compass。


This page provides examples of query operations using the db.collection.find() method in mongosh.

本页上的示例使用来自 sample_mflix 数据集的数据。有关如何将此数据集加载到您的自管理 MongoDB 部署中的详细信息,请参阅 加载示例数据集。如果您对示例数据库进行了任何修改,您可能需要删除并重新创建数据库,才能运行此页面上的示例。

要选择集合中的所有文档,请将空的文档作为查询筛选器参数传递给 find 方法。查询筛选器参数决定选择条件:

db.movies.find( {} )

此操作使用 {} 的空 查询谓词,对应以下 SQL 声明:

SELECT * FROM movies

有关更多信息,请参阅 find()。

要指定相等条件,请在查询筛选器文档中使用 <field>:<value> 表达式:

{ <field1>: <value1>, ... }

以下示例从 sample_mflix.movies集合中选择所有文档,其中 rated 等于 "PG-13":

db.movies.find( { rated: "PG-13" } )

该操作使用 { rated: "PG-13" } 的查询谓词,对应以下 SQL 声明:

SELECT * FROM movies WHERE rated = "PG-13"

查询筛选器文档可以使用查询运算符按照以下形式指定条件:

{ <field1>: { <operator1>: <value1> }, ... }

以下示例从 sample_mflix.movies 集合中检索所有文档。其中 rated 等于 "G" 或 "PG-13":

db.movies.find( { rated: { $in: [ "G", "PG-13" ] } } )

注意

虽然您可以将$or操作符用于此查询,但在对同一字段执行相等性检查时,请使用$in操作符而不是$or。

该操作使用 { rated: { $in: [ "G", "PG-13" ] } } 的查询谓词,对应以下 SQL 声明:

SELECT * FROM movies WHERE rated in ("G", "PG-13")

有关MongoDB查询运算符的完整列表,请参阅查询谓词。

复合查询可以为集合文档中的多个字段指定条件。逻辑 AND 连接词隐式地连接复合查询的子句,以便该查询选择集合中与所有条件匹配的文档。

以下示例检索 sample_mflix.movies集合中的所有文档,其中 rated 等于 "G" 且 runtime 小于 ($lt) 90:

db.movies.find( { rated: "G", runtime: { $lt: 90 } } )

该操作使用 { rated: "G", runtime: { $lt: 90 } } 的查询谓词,对应以下 SQL 声明:

SELECT * FROM movies WHERE rated = "G" AND runtime < 90

有关其他 MongoDB 比较运算符,请参阅比较运算符。

使用 $or 操作符指定复合查询使用逻辑 OR 连词连接每个子句。该查询会选择至少匹配一个条件的文档。

以下示例检索 sample_mflix.movies集合中的所有文档,其中 rated 等于 "G" 或 runtime 小于 ($lt) 90:

db.movies.find( { $or: [ { rated: "G" }, { runtime: { $lt: 90 } } ] } )

该操作使用 { $or: [ { rated: 'G' }, { runtime: { $lt: 90 } } ] } 的查询谓词,对应以下 SQL 声明:

SELECT * FROM movies WHERE rated = "G" OR runtime < 90

注意

使用比较操作符的查询受查询谓词中的类型范围限制。

在以下示例中,复合查询文档选择 sample_mflix.movies集合中的所有文档,其中 rated 等于 "G" 且 要么 runtime 小于 ($lt) 90 或 title 以字符开头T:

db.movies.find( {
rated: "G",
$or: [ { runtime: { $lt: 90 } }, { title: /^T/ } ]
} )

该操作使用以下查询谓词:

{
rated: 'G',
$or: [
{ runtime: { $lt: 90 } },
{ title: { $regex: '^T' } }
]
}

对应如下 SQL 语句:

SELECT * FROM movies WHERE rated = "G"
AND ( runtime < 90 OR title LIKE "T%")

注意

MongoDB 支持正则表达式 $regex 查询,以执行 string 模式匹配。

mongosh 与驱动程序之间的正则表达式语法有所不同。mongosh 使用 JavaScript 正则表达式字面量(例如:{ title: /^T/ })。驱动程序使用等效的 $regex 操作符(例如:{ title: { $regex: '^T' } })。

This example uses the sample movies dataset. To load the sample dataset into your MongoDB Atlas deployment, see Load Sample Data.

要在MongoDB Atlas中项目查询的字段,请按照以下步骤操作:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Database 标题下的 Clusters。

    会显示集群页面。

2
  1. 对于包含样本数据的集群,单击Browse Collections 。

  2. 在左侧导航窗格中,选择 sample_mflix 数据库。

  3. 选择 movies 集合。

3

在 Filter 字段中指定查询筛选器文档。查询筛选器文档使用查询运算符来指定搜索条件。

将以下查询筛选器文档复制到 Filter 搜索栏:

{ year: 1924 }
4

该查询返回 sample_mflix.movies集合中 year字段与 1924 匹配的所有文档。

有关更多查询示例,请参阅:

db.collection.find() 方法会返回指向匹配文档的游标。

当游标返回文档时,其他操作可能会在背景运行并影响结果,具体取决于读关注(read concern)级别。 有关详细信息,请参阅读取隔离性、一致性和新近度。

对于对副本集和副本集分片的读取,读关注(read concern)允许客户端为其读取选择隔离性级别。有关更多信息,请参阅读关注(read concern)。

当您使用MongoDB驱动程序或 mongosh 运行查找操作时,MongoDB会返回一个用于管理查询结果的游标。查询结果不会以文档数组的形式返回。

To learn how to iterate through documents in a cursor, see your driver's documentation. If you are using mongosh, see Iterate a Cursor in mongosh.

您还可以使用以下命令读取集合中的文档:

注意

db.collection.findOne() 方法执行与 db.collection.find() 相同的操作,限制为 1。