Коллекции в 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);