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