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