数据库与集合
概述
在本指南中,您可以了解如何使用 .NET/C# 驱动程序来访问和管理 MongoDB 数据库和集合。
MongoDB 以层次结构组织数据。一个 MongoDB 部署包含一个或多个 数据库,每个数据库包含一个或多个 集合。在集合中,MongoDB 以包含字段-值对的 文档 形式存储数据。
有关文档数据格式的更多信息,请参阅服务器手册中的文档
访问数据库
您可以通过从您的IMongoClient
实例检索一个 IMongoDatabase 实例来访问数据库。您可以使用返回的 IMongoDatabase
实例执行数据库级操作并访问数据库中包含的集合。
要创建一个 IMongoDatabase
,请在一个 GetDatabase() 方法上调用 IMongoClient 实例上,并传递数据库名称作为参数。您还可以传递一个可选的 MongoDatabaseSettings 参数来自定义如何访问数据库。
如果您将一个不存在的数据库名称传递给 GetDatabase()
方法,驱动程序仍然会返回一个 IMongoDatabase
实例。当您将任何数据插入到此数据库中的集合时,服务器将在该时刻创建数据库和集合。
以下示例创建了一个客户端,然后使用 GetDatabase()
方法访问名为 test_db
的数据库。
var client = new MongoClient("<connection string>"); var myDB = mongoClient.GetDatabase("test_db");
数据库列表
要查看部署的数据库列表,请调用异步的 ListDatabaseNamesAsync() 方法或同步的 ListDatabaseNames() 方法,在您的 IMongoClient
实例上。
要查看每个数据库的详细信息,请调用异步的 ListDatabasesAsync() 方法或同步的 ListDatabases() 方法在你的 IMongoClient
实例上。这些方法返回描述集群中数据库的字段,例如它们的尺寸以及它们是否包含数据。
以下代码演示了如何使用异步的 ListDatabaseNamesAsync()
方法或同步的 ListDatabaseNames()
方法来列出集群中数据库的名称
await mongoClient.ListDatabaseNamesAsync();
mongoClient.ListDatabaseNames();
删除数据库
永久删除数据库会从该数据库的集合中删除所有数据。要删除数据库,请在您的 IMongoClient
实例上调用异步的 DropDatabaseAsync() 方法或同步的 DropDatabase() 方法,将数据库名称作为参数传入。
以下代码展示了如何使用异步的 DropDatabaseAsync()
方法或同步的 DropDatabase()
方法来删除名为 test_db
的数据库。
await mongoClient.DropDatabaseAsync("test_db");
mongoClient.DropDatabase("test_db");
警告
删除数据库会删除数据
删除数据库会永久删除数据库集合中的所有文档以及这些集合上的所有索引。删除数据库后,您无法访问或恢复任何数据。
访问一个集合
您可以通过从数据库中检索一个IMongoCollection实例来访问一个集合。您可以使用IMongoCollection
实例执行数据操作、创建聚合和管理索引。要检索IMongoCollection
,请在IMongoDatabase
实例上调用GetCollection()方法。您还可以将可选的MongoCollectionSettings作为参数来自定义如何访问集合。
如果您向此方法传递一个不存在的集合名称,驱动程序仍然返回一个IMongoCollection
实例。当您向该集合插入任何数据时,服务器会创建它。有关如何显式创建集合的信息,请参阅本指南的创建集合部分。
此示例使用GetCollection()
方法从由myDB
变量引用的数据库中访问名为coll_xyz
的集合。
var myColl = myDB.GetCollection<BsonDocument>("coll_xyz");
集合参数化
您必须通过指定要将集合数据序列化为何种数据类型来参数化您的 IMongoCollection
实例。当您对参数化特定类型的 IMongoCollection
实例调用方法时,该方法接受或返回此类型的实例。
以下示例展示了如何使用 BsonDocument
类型参数化一个集合
var collection = database.GetCollection<BsonDocument>("coll_xyz", settings);
提示
我们建议您使用自定义类型来参数化您的 IMongoCollection
实例,该类型模拟您的数据,而不是使用 BsonDocument
类型。通过定义一个模拟您特定数据的类型,您可以避免重复的序列化和验证。
要了解更多关于 .NET/C# 驱动器中的序列化信息,请参阅序列化.
创建集合
您可以通过调用异步方法 CreateCollectionAsync() 或同步方法 CreateCollection() 在您的 IMongoDatabase
实例上创建一个集合。
此方法接受集合名称和可选的 CreateCollectionOptions 类型作为参数。然后您可以使用创建的集合来执行数据操作、创建聚合和管理索引。
以下代码演示了如何使用异步方法 CreateCollectionAsync()
或同步方法 CreateCollection()
在由变量 myDB
引用的数据库中创建名为 coll_abc
的集合。
await myDB.CreateCollectionAsync("coll_abc");
myDB.CreateCollection("coll_abc");
列出集合
要查看数据库中集合的列表,请在您的 IMongoDatabase
实例上调用异步的 ListCollectionNamesAsync() 方法或同步的 ListCollectionNames() 方法。
要查看每个数据库的详细信息,请调用异步的ListCollectionsAsync()方法或同步的ListCollections()方法,在您的IMongoDatabase
实例上。这些方法返回描述数据库中集合的字段,例如它们的类型和设置。
以下代码演示了如何使用异步的ListCollectionNamesAsync()
方法或同步的ListCollectionNames()
方法来列出数据库中集合的名称
await myDB.ListCollectionNamesAsync();
myDB.ListCollectionNames();
删除集合
永久删除一个集合将永久删除该集合中的所有数据。要删除一个集合,请调用异步的 DropCollectionAsync() 方法或同步的 DropCollection() 方法,在你的 IMongoCollection
实例上。
以下代码展示了如何使用异步的 DropCollectionAsync()
方法或同步的 DropCollection()
方法来删除名为 coll_abc
的数据库。
await myDB.DropCollectionAsync("coll_abc");
myDB.DropCollection("coll_abc");
警告
删除集合删除数据
从您的数据库中删除集合将永久删除该集合中的所有文档以及该集合上的所有索引。删除集合后,您将无法访问或恢复其数据。
更多信息
有关本指南中的概念更多信息,请参阅以下文档