Документы и элементы

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

Элементы. BsonElement

Так как MongoDB представляет документо-ориентированные базы данных, то все данные в ней хранятся в виде документов. Таким образом, база данных состоит из коллекций, а коллекции - из документов. Каждый документ, в свою очередь, состоит из элементов, каждый из которых представляет пару имя_элемента-значение_элемента.

На уровне драйвера MongoDB для .NET элементы представляет структура BsonElement из пространства имен MongoDB.BSON. Для создания и инициализации структуры можно использовать ее конструктор, который принимает два параметра:

public BsonElement(string name, BsonValue value)

Первый параметр представляет имя элемента, а второй - его значение. Причем в качестве значения принимается объект типа BsonValue. Однако поскольку BsonValue - абстрактный класс, мы будем передавать значения его наследников. Наиболее распространенные из них:

  • BsonArray: представляет массив

  • BsonBinaryData: представляет набор бинарных данных

  • BsonBoolean: представляет логическое значение, аналогичен типу bool

  • BsonDateTime: представляет дату и время, аналогичен типу DateTime

  • BsonDecimal128: представляет числовое дробное значение, аналогичен типу decimal

  • BsonDouble: представляет число с плавающей точков, аналогичен типу double

  • BsonInt32: представляет 32-битное целочисленное значение, аналогичен типу int

  • BsonInt64: представляет 64-битное целочисленное значение, аналогичен типу long

  • BsonNull: представляет значение null

  • BsonObjectId: представляет уникальный идентификатор

  • BsonString: представляет строку, аналогичен типу string

Например, создадим элемент с именем "name" и значением "Tom":

using MongoDB.Bson;

BsonElement el = new BsonElement("name", new BsonString("Tom"));

Console.WriteLine(el); // name = Tom
Console.WriteLine(el.Name); // name
Console.WriteLine(el.Value); // Tom

С помощью свойств Name и Value можно получить соответственно имя и значение элемента.

Однако в реальности мы можем уйти от Bson-типов и использовать соответствующие базовые типы C#:

using MongoDB.Bson;

BsonElement nameElement = new BsonElement("name", "Tom");
BsonElement ageElement = new BsonElement("age", 38);

Console.WriteLine(nameElement); // name = Tom 
Console.WriteLine(ageElement); // age = 38

Документы. BsonDocument

Коллекции в базах данных хранят документы, которые представлены классом BsonDocument из пространства имен MongoDB.BSON .

Для создания документа мы можем использовать одну из форм конструктора BsonDocument. Например, создадим пустой документ:

using MongoDB.Bson;

BsonDocument doc = new BsonDocument();
Console.WriteLine(doc);

При выводе на консоль мы получим следующее:

{ }

Теперь создадим документ с одним элементом:

using MongoDB.Bson;

BsonElement name = new BsonElement("name", "Tom");
BsonDocument doc = new BsonDocument(name);

Console.WriteLine(doc); // { "name" : "Tom" }

И консоль отобразит следующее:

{ "name" : "Tom" }

Гораздо более простой способ инициализации объекта BsonDocument представляет использование инициализатора, в котором перечисляются все входящие в документ BsonElement.

BsonDocument doc = new BsonDocument{ {элемент1}, {элемент2}, ... {элементN}};

Например, перепишем предыдущий пример:

BsonDocument doc = new BsonDocument{{"name", "Tom"}};

Подобным образом можно создавать более сложные по композиции документы. При чем отдельные поля документа могут представлять вложенные документы. Например:

using MongoDB.Bson;

BsonDocument doc = new BsonDocument
{
    {"name","Tom"},
    {"age", 38},
    { "company", new BsonDocument{{"name" , "microsoft"}}},
    {"languages", new BsonArray{"english", "german", "spanish" } }
};

Console.WriteLine(doc);

Здесь документ doc содержит четыре элемента:

  1. Элемент "name" со значением "Tom"

  2. Элемент "age" со значением 38

  3. Элемент "company" представляет отдельный вложенный BsonDocument, который, в свою очередь, содержит один элемент с именем "name" и значением "Microsoft"

  4. Элемент "languages" представляет массив из трех строк "english", "german" и "spanish"

Консольный вывод программы:

{ 
    "name" : "Tom", 
    "age" : 38, 
    "company" : { "name" : "microsoft" }, 
    "languages" : ["english", "german", "spanish"] 
}

Обращение к полям документа

BsonDocument поддерживает индексаторы, которые позволяют обратиться к определенному элементу по имени:

using MongoDB.Bson;

BsonDocument doc = new BsonDocument
{
    {"name","Tom"},
    {"age", 38},
    { "company",new BsonDocument{{"name" , "microsoft"}}},
    {"languages", new BsonArray{"english", "german", "spanish" } }
};
// получаем значение поля name
Console.WriteLine(doc["name"]);         // Tom
// получаем значение поля languages
Console.WriteLine(doc["languages"]);    // [english, german, spanish]

// изменяем значение поля age
doc["age"] = 22;
Console.WriteLine(doc["age"]);      // 22

Управление элементами

С помощью методов класса BsonDocument мы можем управлять элементами внутри документа:

  • Add(): добавляет элемент в документ

  • AddRange(): добавляет набор элементов в документ

  • Clear(): удаляет все элементы из документа

  • Contains(): возвращает true, если в документе есть элемент с определенным именем

  • ContainsValue(): возвращает true, если в документе есть элемент с определенным значением

  • GetValue(): возвращает значение определенного элемента по имени или по позиции

  • Remove(): удаляет элемент из документа

Применение некоторых методов:

using MongoDB.Bson;

BsonDocument doc = new BsonDocument{{"name","Bob"}};

BsonElement email = new BsonElement("email", "bob@localhost.com");
// добавляем элемент email
doc.Add(email);

Console.WriteLine(doc);    // { "name" : "Bob", "email" : "bob@localhost.com" }


// удаляем элемент name
doc.Remove("name");
Console.WriteLine(doc);  // { "email" : "bob@localhost.com" }
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850