Всю модель устройства базы данных в MongoDB можно представить следующим образом:
Если в реляционных бд содержимое составляют таблицы, то в mongodb база данных состоит из коллекций.
Каждая коллекция имеет свое уникальное имя - произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания.
В отличие от реляционных баз данных MongoDB не использует табличное устройство с четко заданным количеством столбцов и типов данных. MongoDB является документо-ориентированной системой, в которой центральным понятием является документ.
Документ можно представить как объект, хранящий некоторую информацию. В некотором смысле он подобен строкам в реляционных субд, где строки хранят информацию об отдельном элементе. Например, типичный документ:
{ "name": "Tom", "surname": "Smith", "age": "37", "company": { "name" : "Microsoft", "salary" : "100" } }
Документ представляет набор пар ключ-значение. Например, в выражении "name": "Tom"
"name" представляет ключ, а "Tom" - значение.
Ключи представляют строки. Значения же могут различаться по типу данных. В данном случае у нас почти все значения также представляют строковый тип, и лишь один ключ (company) ссылается на отдельный объект. Всего имеется следующие типы значений:
TRUE
или FALSE
,
например, {"married": FALSE}
{"age": 29}
Null
В отличие от строк документы могут содержать разнородную информацию. Так, рядом с документом, описанным выше, в одной коллекции может находиться другой объект, например:
{ "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 байт, который инициализирован случайным числом.
Такая модель построения идентификатора гарантирует с высокой долей вероятности, что он будет иметь уникальное значение.