Работа с базой данных

Устройство базы данных. Документы

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

Всю модель устройства базы данных в MongoDB можно представить следующим образом:

Организация базы данных в MongoDB

Если в реляционных бд содержимое составляют таблицы, то в mongodb база данных состоит из коллекций.

Каждая коллекция имеет свое уникальное имя - произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания.

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

Документ можно представить как объект, хранящий некоторую информацию. В некотором смысле он подобен строкам в реляционных субд, где строки хранят информацию об отдельном элементе. Например, типичный документ:

{
    "name": "Tom",
    "surname": "Smith",
    "age": "37",
	"company": {
        "name" : "Microsoft",
        "salary" : "100"
    }
}

Документ представляет набор пар ключ-значение. Например, в выражении "name": "Tom" "name" представляет ключ, а "Tom" - значение.

Ключи представляют строки. Значения же могут различаться по типу данных. В данном случае у нас почти все значения также представляют строковый тип, и лишь один ключ (company) ссылается на отдельный объект. Всего имеется следующие типы значений:

  • String: строковый тип данных, (для строк используется кодировка UTF-8)

  • Array (массив): тип данных для хранения массивов элементов

  • Binary data (двоичные данные): тип для хранения данных в бинарном формате

  • Boolean: булевый тип данных, хранящий логические значения TRUE или FALSE, например, {"married": FALSE}

  • Date: хранит дату в формате времени Unix

  • Double: числовой тип данных для хранения чисел с плавающей точкой

  • Integer: используется для хранения целочисленных значений размером 32 бита, например, {"age": 29}

  • Long: используется для хранения целочисленных значений размером 64 бита

  • JavaScript: тип данных для хранения кода javascript

  • Min key/Max key: используются для сравнения значений с наименьшим/наибольшим элементов BSON

  • Null: тип данных для хранения значения Null

  • Object: объект, который содержит набор свойств

  • ObjectId: тип данных для хранения id документа

  • Regular expression: применяется для хранения регулярных выражений

  • Decimal128: тип данных для хранения десятичных дробных чисел размером 128 бит, которые позволяют решить проблемы с проблемой точности вычислений при использовании дробных чисел, которые представляют тип Double.

  • Timestamp: применяется для хранения времени

В отличие от строк документы могут содержать разнородную информацию. Так, рядом с документом, описанным выше, в одной коллекции может находиться другой объект, например:

{
    "name": "Bob",
    "birthday": "1985.06.28",
	"place" : "Berlin",
	"languages" :[
		"english",
		"german",
		"spanish"
	]
}

Казалось бы разные объекты за исключением отдельных свойств, но все они могут находиться в одной коллекции.

Еще пара важных замечаний: в MongoDB запросы обладают регистрозависимостью и строгой типизацией. То есть следующие два документа не будут идентичны:

{"age" : "28"}
{"age" : 28}

Если в первом случае для ключа age определена в качестве значения строка, то во втором случае значением является число.

Идентификатор документа

Для каждого документа в MongoDB определен уникальный идентификатор, который называется _id. При добавлении документа в коллекцию данный идентификатор создается автоматически. Однако разработчик может сам явным образом задать идентификатор, а не полагаться на автоматически генерируемые, указав соответствующий ключ и его значение в документе.

Данное поле должно иметь уникальное значение в рамках коллекции. И если мы попробуем добавить в коллекцию два документа с одинаковым идентификатором, то добавится только один из них, а при добавлении второго мы получим ошибку.

Если идентификатор не задан явно, то MongoDB создает специальное бинарное значение размером 12 байт. Это значение состоит из нескольких сегментов: значение типа timestamp размером 4 байта (которое представляет количество секунд с момента начала эпохи Unix), случайное число из 5 байт и счетчик из 3 байт, который инициализирован случайным числом. Такая модель построения идентификатора гарантирует с высокой долей вероятности, что он будет иметь уникальное значение.

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