数据库与集合
概述
在本指南中,您可以了解如何使用Rust驱动程序来访问和管理MongoDB数据库和集合。
MongoDB以分层结构组织数据。一个MongoDB部署包含一个或多个数据库,每个数据库包含一个或多个集合。在每个集合中,MongoDB将数据存储为包含字段和值对的文档。
要了解更多关于文档数据格式的信息,请参阅服务器手册中的文档。
访问数据库
您可以通过从客户端检索一个 Database 实例来访问数据库。您可以使用Database
实例来执行数据库级别的操作并访问数据库包含的集合。
在Client实例上调用以下方法之一来创建一个数据库
database():通过名称检索数据库
database_with_options():在按名称获取数据库时设置选项(DatabaseOptions)
default_database():访问为您的
Client
实例指定的默认数据库
提示
要指定客户端的默认数据库,设置 ClientOptions
结构中的 default_database
字段。如果未设置此字段,驱动程序从连接字符串的 defaultauthdb
组件中获取默认数据库。
如果您传递了一个不存在的数据库的名称给 database()
或 database_with_options()
方法,驱动程序仍然返回一个 Database
实例。当您将任何数据插入到该数据库中的集合时,服务器会创建它。
以下示例使用 database()
方法访问名为 test_db
的数据库。
let db = client.database("test_db");
列出数据库
要查看您部署的数据库列表,请在您的 Client
实例上调用 list_database_names() 方法。此方法返回一个 Vec<String>
类型的值,它是一个包含字符串形式的数据库名称的向量。
要查看每个数据库的详细信息,请在您的 Client
实例上调用 list_databases() 方法。此方法返回一个 Vec<DatabaseSpecification>
类型。该 DatabaseSpecification 类型包含描述每个数据库的字段,例如其大小和是否包含数据。
以下示例展示了如何使用 list_database_names()
方法打印数据库列表
let db_list = client.list_database_names().await?; println!("{:?}", db_list);
["admin", "local", "test_db", ...]
删除数据库
永久删除数据库会删除该数据库集合中的所有数据。要删除数据库,请调用您的 Database
实例上的 drop() 方法。以下代码展示了如何删除由 db
变量引用的数据库
db.drop().await?;
警告
删除数据库会删除数据
删除数据库会永久删除数据库集合中的所有文档以及这些集合上的所有索引。删除数据库后,您无法访问或恢复其数据。
访问集合
您可以通过从数据库中检索 Collection 实例来访问集合。您可以使用 Collection
实例执行数据操作、创建聚合和管理索引。在 Database
实例上调用以下方法之一以检索 Collection
collection():通过名称获取集合
collection_with_options():在通过名称访问集合时设置选项(CollectionOptions)
如果你将一个不存在的集合名称传递给 collection()
或 collection_with_options()
方法,驱动程序仍然返回一个 Collection
实例。当你向此集合中插入任何数据时,服务器会创建它。有关如何显式创建集合的信息,请参阅本指南中的创建集合部分。
此示例使用 collection_with_options()
方法执行以下操作
通过
db
变量访问名为coll_xyz
的集合在
CollectionOptions
类型中设置集合的写入偏好
let wc = WriteConcern::builder().journal(true).build(); let coll_opts = CollectionOptions::builder().write_concern(wc).build(); let my_coll: Collection<Document> = db.collection_with_options("coll_xyz", coll_opts);
有关写入关注点的更多信息,请参阅服务器手册中的写入关注点。
集合参数化
您必须通过指定将集合数据序列化为何种数据类型来参数化您的 Collection
实例。当你对一个参数化特定类型的 Collection
实例调用方法时,该方法接受或返回此类型的一个实例。
注意
如果您未参数化您的 Collection
实例,编译器会在您在同一作用域内使用指定数据类型的 CRUD 操作时推断泛型类型。
以下示例显示了使用 Document
类型参数化集合的等效方式
let my_coll: Collection<Document> = client.database("test_db").collection("coll_xyz"); let my_coll = client.database("test_db").collection::<Document>("coll_xyz");
提示
我们建议您使用自定义类型来参数化您的 Collection
实例,该类型模拟您的数据,而不是使用 Document
类型。您可以通过定义一个模拟特定数据的类型来避免重复序列化和验证。
有关 Rust 驱动程序中的序列化的更多信息,请参阅有关数据建模和序列化的指南.
创建集合
您可以通过在 Database
实例上调用 create_collection() 方法来显式创建一个集合。此方法需要一个参数,即集合名称。您可以使用 Collection
实例执行数据操作、创建聚合和索引管理。
以下代码演示了如何在 db
变量引用的数据库中创建名为 coll_abc
的集合。
db.create_collection("coll_abc").await?;
在创建集合时,您可以实现模式验证以维护一致的文档模式并控制是否允许任何写操作绕过验证规则。有关如何启用此功能的说明,请参阅 模式验证指南。
列出集合
要查看数据库中集合的名称,请调用您 Database
实例上的 list_collection_names() 方法。此方法返回一个 Vec
类型,它包含作为字符串的集合名称的向量。
要查看每个集合的详细信息,请调用您的 Database
实例上的 list_collections() 方法。此方法返回一个 Vec<CollectionSpecification>
类型的值。该 CollectionSpecification 类型包含描述每个集合的字段,例如其类型和设置。
以下示例展示了如何使用 list_collection_names()
方法打印由 db
变量引用的数据库中集合的名称。
let coll_list = db.list_collection_names().await?; println!("{:?}", coll_list);
["my_coll", "coll_xyz", ...]
删除集合
永久删除集合会删除该集合中的所有数据。要删除集合,请调用您的 Collection
实例上的 drop() 方法。以下代码演示了如何删除由 my_coll
变量引用的集合:
my_coll.drop().await?;
警告
删除集合会删除数据
从数据库中删除集合会永久删除该集合中的所有文档以及该集合上的所有索引。删除集合后,您无法访问或恢复其任何数据。
更多信息
有关本指南中的概念的更多信息,请参阅以下文档