Модели данных

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

Коллекции в MongoDB хранят документы в виде объектов BsonDocument. Однако драйвер MongoDB для .NET также позволяет работать с данными из коллекций как с объектами стандартных классов C#, которые представляют эти данные. Например, определим следующие классы:

using MongoDB.Bson;

class Person
{
    public ObjectId Id { get; set; }
    public string? Name { get; set; }
    public int Age { get; set; }
    public Company? Company { get; set; }
    public List<string>? Languages { get; set; } = new List<string>();
}
class Company
{
    public string? Name { get; set; }
}

Здесь определен класс Person, который представляет человека, и класс Company, который представляет компанию, где работает человек.

Стоит обратить внимание, что в качестве свойства-идентификатора Id в классе Person используется объект класса ObjectId, который определен в библиотеке MongoDB.Bson.dll.

Пространство имен MongoDB.Bson добавляет ряд функциональностей к классам C#, которые позволяют использовать объекты этих классов в качестве документов:

using MongoDB.Bson;

Person person = new Person { Name = "Tom", Age = 38 };
person.Company = new Company { Name = "Microsoft" };

Console.WriteLine(person.ToJson());

Библиотека MongoDB.Bson.dll добавляет ряд методов к классам, в частности метод ToJson, который преобразует объект в формат JSON, а сам объект представляет документ. Так, в данном случае мы получим следующий консольный вывод:

{ 
    "_id" : ObjectId("000000000000000000000000"), 
    "Name" : "Tom", 
    "Age" : 38, 
    "Company" : { "Name" : "Microsoft" }, 
    "Languages" : [] 
}

При создании документа мы можем воспользоваться как стандартным классом C#, так и классом BsonDocument, и при необходимости перейти от одного к другому. Например:

using MongoDB.Bson;
using MongoDB.Bson.Serialization;

BsonDocument doc = new BsonDocument
{
    {"Name","Tom"},
    {"Age", 38},
    {"Company", new BsonDocument{ {"Name" , "Microsoft"}} },
    {"Languages", new BsonArray{"english", "german", "spanish"} }
};
Person person = BsonSerializer.Deserialize<Person>(doc);
Console.WriteLine(person.ToJson()); 

С помощью метода Deserialize() класса BsonSerializer из пространства имен MongoDB.Bson.Serialization мы можем выполнить десериализацию из документа в объект модели Person. При этом важно, чтобы имена свойств модели совпадали с именами элементов в документе (в том числе и по регистру), иначе программе не удастся сопоставить элементы и свойства.

Также можно выполнить обратную операцию по преобразованию объекта в BsonDocument. Для этого у объекта вызывается метод ToBsonDocument():

using MongoDB.Bson;

Person person = new Person 
{ 
    Name = "Tom", 
    Age = 38, 
    Company = new Company{ Name = "Microsoft" }, 
    Languages = {"english", "german", "spanish"}
};

BsonDocument doc = person.ToBsonDocument();
Console.WriteLine(doc);
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850