Коллекции

Последнее обновление: 25.10.2022

Подобно тому, как в обычных реляционных СУБД мы проходим несколько уровней при взаимодействии с сервером базы данных (сервер БД - > база данных -> таблица), так и при взаимодействии с MongoDB мы также проходим несколько уровней:

Классы C# в MongoDB

Ранее мы рассмотрели получение ссылки на базу данных с помощью объекта IMongoDatabase. Данные в базе данных хранятся в коллекциях, которые представлены объектом IMongoCollection. Для работы с коллекциями тип IMongoDatabase предоставляет ряд методов:

  • CreateCollection()/CreateCollectionAsync(): создает новую коллекцию

  • RenameCollection()/RenameCollectionAsync(): переименовывает коллекцию

  • GetCollection(): возвращает коллекцию

  • DropCollection()/DropCollectionAsync(): удаляет коллекцию

  • ListCollections()/ListCollectionsAsync(): возвращает список всех коллекций

  • ListCollectionNames()/ListCollectionNamesAsync(): возвращает список имен всех коллекций

Создание коллекции

Для создания коллекции применяются методы CreateCollection()/CreateCollectionAsync(), в которые передается имя создаваемой коллекции. Например, создадим в базе данных test коллекцию "people".

using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("test");
await db.CreateCollectionAsync("people");  // создаем коллекцию "people"

Получение списка коллекций

После создания коллекции people посмотрим, какие вообще коллекции у нас есть в базе данных. Для этого применяются методы ListCollections()/ListCollectionsAsync(). Они возвращают курсор, из которого с помощью метода ToList() можно получить стандартный список List:

using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");

var db = client.GetDatabase("test");

var collections = await db.ListCollectionsAsync();
foreach(var collection in collections.ToList())
{
    Console.WriteLine(collection);
}

Информация о каждой коллекции представояет сложный объект, для представления которого применяется json-подобная нотация. Например, в моем случае после добавления коллекции "people" я получу следующий консольный вывод:

{ "name" : "people", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : CSUUID("4352486e-32fa-4ad8-bf08-cf114eb86bbe") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }

Так, мы видим, что в бд только одна коллекция. И во всей этой информации нас пока будет интересовать свойство "name", которое в данном случае равно "people".

Если нас интересуют только имена коллекций, то мы можем использовать другой метод - ListCollectionNames()/ListCollectionNamesAsync():

var collections = await db.ListCollectionNamesAsync();
foreach(var collection in collections.ToList())
{
    Console.WriteLine(collection);
}

Переименование коллекции

Для переименования коллекции применяются методы RenameCollection()/RenameCollectionAsync(), которые принимают название коллекции, которую надо переименовать, и новое название. Например, переименуем коллекцию "people" в "users":

using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("test");
await db.RenameCollectionAsync("people", "users"); // из people в users

Удаление коллекции

Для удаления коллекции применяются методы DropCollection()/DropCollectionAsync(), в которые передается имя удаляемой коллекции. Например, удалим коллекцию "users".

using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");
var db = client.GetDatabase("test");
await db.DropCollectionAsync("users");  // удаляем коллекцию "users"

Получение коллекции

Для взаимодействия с коллекцией, работы с ее данными нам необходимо получить саму эту коллекцию. Для этого необходимо вызвать метод GetCollection<TDocument>. Этот метод типизируется типом документов, которые хранит коллекция. Обычно в качестве такого типа применяется тип BsonDocument из пространства имен MongoDB.Bson, который мы далее рассмотрим. Например, создадим и получим коллекцию "users":

using MongoDB.Bson;
using MongoDB.Driver;

MongoClient client = new MongoClient("mongodb://localhost:27017");

var db = client.GetDatabase("test");

await db.CreateCollectionAsync("users"); // создаем users
// получаем коллекцию users 
IMongoCollection<BsonDocument> users = db.GetCollection<BsonDocument>("users");

В данном случае получаем коллекцию "users" в одноименную переменную. Объект IMongoCollection типизируется типом объектов, которые хранит коллекция. В данном случае коллекция типизирован встроенным универсальным типом BsonDocument, который представляет собой документ. А саму коллекцию можно представлять как набор документов BsonDocument. И после этого мы сможем взаимодействовать с коллекцией users.

Стоит отметить, что реализация интерфейса IMongoCollection по умолчанию потокобезопасна, поэтому ее можно определить в приложении в качестве глобальной переменной или через IoC-контейнер и повторно использовать в различных частях приложения.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850