С момента своего появления MongoDB успела завоевать огромную популярность благодаря своей способности обрабатывать большие объемы данных. Ее принятие только растет, впрочем, как и сам рынок, на котором она востребована. Если вы нацелены связать свою карьеру с MongoDB, то сейчас самое время. Чтобы помочь вам на этом пути, мы подготовили список часто задаваемых вопросов по MongoDB с собеседований и ответов на них.

MongoDB — это документоориентированная система управления базами данных, которая хранит данные в виде JSON-документов. В основе ее работы лежат концепции документов и коллекций. MongoDB может хранить несколько баз данных и обеспечивает высокую производительность, масштабируемость и избыточность. Этот перечень вопросов по MongoDB предназначен главным образом для того, чтобы дать вам представление о том, с какими вопросами вы можете столкнуться на реальном собеседовании.

Обычно на собеседованиях рекрутеры начинают с простых вопросов и постепенно повышают уровень их сложности. Поэтому и в этой статье мы сначала рассмотрим самые простые вопросы, а затем перейдем к сложным. С помощью этих отобранных вопросов, вы сможете подготовиться к реальному собеседованию по MongoDB.

Мы разделили вопросы по MongoDB (обновленный список 2023-го года) на 4 уровня:

  • Самые популярные

  • Основы

  • Продвинутый уровень

  • Для опытных пользователей

Топ-10 наиболее часто задаваемых на собеседовании вопросов по MongoDB

  • Что такое MongoDB?

  • Каковы главные фичи MongoDB?

  • К какому типу NoSQL-баз данных относится MongoDB?

  • Чем MongoDB отличается от MySQL?

  • Для чего используется MongoDB?

  • Каков синтаксис метода skip()?

  • Как удалить все из базы данных MongoDB?

  • Как мы выполняются Join-операции в MongoDB?

  • Каковы типы данных в MongoDB?

  • Как получить базу данных MongoDB в виде Javascript-массиве?

Самые популярные на собеседованиях вопросы по MongoDB и ответы к ним

1) Что такое MongoDB?

MongoDB — это кроссплатформенная документо-ориентированная система управления базами данных. Относясь к категории NoSQL, MongoDB отказывается от традиционной таблично-ориентированной структуры реляционных баз данных в пользу JSON-документов с динамическими схемами, что делает интеграцию данных в приложениях более быстрой и простой.

MongoDB была разработана компанией "10gen", в октябре 2007 года как компонент планируемой платформы в качестве сервисного продукта. После этого, в 2009 году компания перешла на модель разработки продуктов с открытым исходным кодом, предлагая коммерческую поддержку и другие услуги.

2) Каковы главные фичи MongoDB?

Ниже перечислены несколько самых важных фич MongoDB:

  • Удобная модель данных в формате документов.

  • Гибкая и чрезвычайно масштабируемая база данных.

  • Быстрее, чем традиционные базы данных.

  • Наглядный язык запросов.

3) К какому типу NoSQL баз данных относится MongoDB?

MongoDB — это документо-ориентированная система управления базами данных. Она хранит данные в виде бинарных JSON-документов (BSON), которые в свою очередь организованы в коллекции.

4) Что такое пространство имен?

Пространство имен (namespace) представляет собой конкатенацию имени коллекции и имени базы данных.

Вопросы по основам MongoDB

5) Чем MongoDB отличается от MySQL?

Несмотря на то что MySQL и MongoDB обе являются свободно распространяемыми базами данных с открытым исходным кодом, между ними существует ряд существенных различий, касающихся отношений между данными, транзакций, скорости работы, запросов данных, структуры схем, нормализации и т.д. Сравнение между MongoDB и MySQL по сути аналогично сравнению между нереляционными и реляционными базами данных.

Больше почитать о сравнении MongoDB и MySQL можно здесь.

6) Что из себя представляют вторичные индексы MongoDB?

В MongoDB для эффективного выполнения запросов используются вторичные индексы (Indexes), которые позволяют упорядочить данные по определенному полю, что впоследствии ускорит поиск. Например, если мы в своем приложении или задаче, как правило, выполняем поиск по полю name, то мы можем индексировать коллекцию по этому полю. Без индексов MongoDB должна была бы выполнить полное сканирование коллекции, т.е. перебрать все документы коллекции, чтобы выбрать те, которые бы соответствовали запросу. Если для запроса был создан подходящий индекс, то MongoDB будет использовать его для ограничения количества документов, которые необходимо просмотреть.

7) Почему MongoDB считается лучшей NoSQL базой данных?

MongoDB считается лучшей NoSQL-базой данных благодаря следующим особенностям:

  • Высокая производительность

  • Высокая доступность

  • Легко масштабируется

  • Полнофункциональный язык запросов

  • Документо-ориентированность

8) Объясните, зачем нужно покрывать запросы индексами?

Полностью охватываемый индексами запрос (covered query) выполняется намного быстрее, так как индексы либо хранятся в оперативной памяти, либо расположены на диске последовательно. Когда критерии запроса включают только индексированные поля, MongoDB будет возвращать результаты непосредственно из индекса без сканирования каких-либо документов или переноса документов в память.

9) Что такое набор реплик?

Набор реплик (replica set) — это группа инстансов mongod (основной процесс mongoDB, задача которого — прием запросов, их обработка и выполнение), которые хранят копии одного и того же набора данных, обеспечивая избыточность и высокую доступность. Набор реплик состоит из одного первичного инстанса/узла (который принимает все операции записи) и одного или нескольких вторичных инстансов/узлов, которые синхронизируются с первичным.

10) Чем MongoDB отличается от Cassandra?

MongoDB

Cassandra

Это кроссплатформенная документо-ориентированная система управления базами данных.

Это высокопроизводительная распределенная система управления базами данных.

Разработана на языке C++

Разработана на языке Java

Проста в администрировании при возникновении сбоев.

Обеспечивает высокий уровень доступности.

Ознакомьтесь с нашим сравнением Cassandra и MongoDB

11) Объясните, что такое первичный и вторичный узел в наборе реплик?

В MongoDB первичные узлы — это узлы, принимающие записи. Первичные узлы также называются мастер-узлами. Репликация в MongoDB происходит по одному мастеру, поэтому только один узел будет принимать операции записи в один момент времени.

12) Какие языки мы можем использовать с MongoDB?

В настоящее время MongoDB предлагает поддержку драйверов для C++, Java, PHP, Perl, Python, Go, Scala и Ruby.

13) Скажите пару слов про шифрование хранилищ?

Все данные MongoDB в хранилище (или вообще в операционной системе) зашифровываются, что гарантирует, что только аутентифицированные процессы получат доступ к защищенным данным.

14) Объясните, что такое первичный и вторичный наборы реплик?

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

15) В чем заключается важность GridFS и журналирования?

  • GridFS: Мы используем GridFS для получения и хранения больших файлов, таких как изображения, видео и аудиофайлы.

  • Журналирование: Мы используем журналирование для безопасного резервного копирования в MongoDB.

16) Как реализовать транзакции или locking в MongoDB?

В MongoDB не используется традиционный locking (такой, как скрипт автодоверия MySQL MyISAM) в угоду высокой скорости, понятности и легкости в представлении. Пожертвовав бизнес-транзакционностью мы можем повысить производительность, особенно в структуре с различными серверами.

17) Что из себя представляет журналирование в MongoDB?

Когда происходит журналирование, мы сохраняем операции записи в памяти. Файлы журналов на диске (в подкаталоге dbPath journal) являются надежным средством, которое легко администрировать.

18) Как MongoDB обеспечивает параллелизм?

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

19) Объясните, что такое сегментирование и агрегация в MongoDB?

  • Агрегация — это действия, которые обрабатывают записи данных и выдают результаты записи.

  • Сегментирование (шардинг) означает хранение данных на нескольких машинах.

20) В чем заключается важность профилировщика в MongoDB?

MongoDB содержит профилировщик базы данных, который оценивает производительность каждой операции с базой данных. С помощью профилировщика мы можем определить запросы, которые выполняются медленнее, чем должны, и на основе этих данных определять, когда нам необходим индекс.

21) Дайте определение понятию «коллекция»

Коллекция представляет собой набор документов MongoDB.

22) Объясните, что такое конвейер агрегации?

Конвейер агрегации (Aggregation Pipeline) выступает в качестве основы для выполнения задач агрегирования. Мы используем этот конвейер для преобразования документов в агрегированные результаты.

23) Объясните, что такое MapReduce?

MapReduce — это стандартная многофазная модальность агрегации данных, которую мы используем для их обработки.

24) Что такое сплиттинг?

Разбиение (splitting) — это фоновый процесс, который мы используем для хранения чанков, чтобы они не становились слишком большими.

25) Каково назначение метода save()?

Метод save() используется для замены существующих документов на новые.

26) Где целесообразнее всего использовать MongoDB?

  • Как правило, MongoDB используется в качестве основного хранилища данных для юзкейсов с большими операционными требованиями в реальном времени. В целом MongoDB подходит для 80% приложений, которые мы разрабатываем сегодня. MongoDB проста в эксплуатации и имеет такие возможности, которые с трудом достижимы при использовании реляционных баз данных.

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

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

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

27) Каково назначение команды db?

Мы используем команду "db" в качестве имени текущей выбранной базы данных.

28) Каковы ограничения 32-разрядной версий MongoDB?

Когда мы запускаем 32-разрядную версию MongoDB, общий размер хранилища сервера, содержащего индексы и данные, составляет всего 2 ГБ. По этой причине нам не стоит разворачивать MongoDB в продакшн на 32-разрядных машинах. Если же мы развернем 64-разрядную версию MongoDB, то виртуальных ограничений на размер хранилища не будет. мы настоятельно рекомендуем использовать для развертывания в продакшене 64-разрядные операционные системы и сборки.

29) Когда следует нормализовать данные в MongoDB?

Это зависит от наших целей. Нормализация дает обновленное эффективное представление данных. Денормализация делает чтение данных эффективным. Как правило, мы используем встроенные модели данных, когда:

  • Когда между нашими сущностями есть отношения «содержит».

  • Когда между нашими сущностями есть отношения «один-ко-многим». В отношениях «многие» или дочерние документы отображаются в контексте родительских документов.

Как правило, мы используем нормализованные модели данных:

  • Если встраивание приводит к дублированию данных, и преимущества в производительности чтения не перекрываю влияние дублирования.

  • Для представления более сложных отношений «многие-ко-многим».

  • Для моделирования больших иерархических массивов данных.

30) Как производить выборку данных в MongoDB?

Для поиска любых данных в MongoDB мы используем метод find(). Метод discovery() возвращает документы коллекции, над которыми мы вызвали этот метод. Мы можем использовать в запросе к MongoDB выражение "Where", чтобы ограничить вывод с помощью проекции MongoDB. Каждый раз, когда мы выполняем метод find(), MongoDB возвращает все документы, связанные с конкретной коллекцией. 

db.<collection_name>.find({ }, {<key_Name>:<Flag to display>})

31) Как в MongoDB имитировать подзапрос или join?

Для имитации простого подзапроса или join в SQL в MongoDB нам необходимо найти наилучший метод структурирования данных. Например, у нас есть пользователи и сообщения, причем пользователи находятся в одной коллекции, а сообщения — в другой. Нам нужно найти все сообщения пользователей, чей город "Hyderabad".

32) Что такое oplog?

Оперативный журнал (oplog) — это особый вид ограниченной коллекции, в которой хранится запись всех операций, изменяющих данные, которые мы храним в наших базах данных. В первую очередь все операции с базой данных выполняются над первичным узлом, после чего эти операции записываются в oplog первичного узла. После этого вторичные узлы реплицируют и применяют операции в асинхронном порядке.

33) Как создать базу данных в MongoDB?

Когда я хочу создать базу данных в MongoDB, я сталкиваюсь со следующей ошибкой:

 :~$mongo

MongoDB shell version:1.65

Connecting to: test

Error: Could not connect to the server

Exception: connect failed

Решение данной ошибки:

  1. cd/var1/lib1/MongoDB

  2. Удаляем mongod.lock из папки

  3. Sudo start MongoDB

  4. Mongo

34) Каков синтаксис метода skip()?

Синтаксис метода skip() следующий:

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

35) Как удалить все из базы данных MongoDB?

Используя следующий код, мы можем полностью очистить базу данных MongoDB:

use [database];
db.dropDatabase();
Ruby code should be pretty similiar.
Also, from the command line:
mongo [Database] -eval "db.dropDatabase();"
use
[databaseName]
db.Drop+databasename();
drop colllection
use databaseName
db.collectionName.drop();

36) Какую команду мы используем для создания резервной копии базы данных?

Для создания резервной копии базы данных мы используем команду mongodump.

37) Какую команду мы используем для восстановления резервной копии?

Для восстановления резервной копии мы используем mongorestore.

38) Зачем нужна точечная нотация?

В MongoDB для доступа к элементам массива и полям встроенного документа используется точечная нотация.

39) Каков синтаксис методов limit() и sort()?

Синтаксис метода limit() имеет вид:

>db.COLLECTION_NAME.find().limit(NUMBER)

Синтаксис метода sort() имеет вид:

>db.COLLECTION_NAME.find().sort({KEY:1})

40) Что вы знаете о NoSQL базах данных? Какие бывают типы NoSQL баз данных?

NoSQL означает "Not Only SQL". NoSQL — это разновидность базы данных, которая обрабатывает и сортирует все виды структурированных, массивных и сложных данных. Это переосмысление традиционных баз данных. Виды NoSQL баз данных:

  • На основе ключ-значение

  • Графовые

  • Столбчатые/Колоночные

  • Документо-ориентированные 

41) Какую команду следует использовать для сброса базы данных?

Для сброса базы данных мы используем команду DB.drop database.

42) Объясните проекции в MongoDB

В MongoDB для выбора только нужных нам данных мы используем проекцию. Она не будет выбирать все данные документа.

43) Зачем используется метод pretty()?

Метод pretty() используется для отображения результатов в отформатированном виде.

44) Как удалить документ из коллекции?

Используя метод remove(), мы можем удалить документ из коллекции.

45) Какие моменты следует учитывать при создании схемы в MongoDB?

При создании схемы необходимо учитывать следующие моменты:

  • Основой для структуры схемы должны служить требования пользователя.

  • Объединяйте объекты в один документ, если их нужно использовать совместно, а если нет, то, наоборот, разделяйте их по разным документам.

  • Выполняйте объединения во время записи, а не во время чтения.

  • Для большинства общих сценариев применения следует максимизировать схему.

  • Выполняйте сложные агрегации в схеме.

46) Что содержит ObjectId?

ObjectId содержит следующее:

  • Идентификатор клиентской машины

  • Идентификатор клиентского процесса

  • Счетчик с байтовым инкрементом

  • Таймстемп

47) Как использовать агрегацию select * group by MongoDB?

Например, если нам необходимо выбрать все атрибуты и группы по имени во всех записях. Например:

{Name: George, x: 5, y: 3}
{Name: George, z: 9}
{Name: Rob, x: 12, y: 2}

Агрегация в MongoDB может быть выполнена следующим образом:

db.example.aggregate(
  {
    $group:{
      _id:'$name',
x: {$addToSet: "$x"    },
y: {$addToSet: "$y"    },
z: {$addToSet: "$z"    },
 }
}
)

48) Объясните, что такое вертикальное и горизонтальное масштабирование?

  • Вертикальное масштабирование: При вертикальном масштабировании увеличиваются ресурсы памяти и процессора для расширения общей емкости.

  • Горизонтальное масштабирование: Горизонтальное масштабирование разделяет наборы данных и распределяет их по нескольким хранилищам или серверам.

49) Что представляют собой элементы сегментированного кластера?

Ниже перечислены элементы сегментированного кластера:

  • Маршрутизаторы запросов 

  • Сегменты/шарды

  • Конфигурационные серверы

50) Какие существуют альтернативы MongoDB?

Ниже перечислены популярные альтернативы MongoDB:

  • Hbase

  • CouchDB

  • Cassandra

  • Redis

  • Riak

51) Можно ли поместить старые файлы в каталог moveChunk?

В ходе общих операций по балансировке сегментов мы создаем резервные копии старых файлов, которые можно удалить по завершении этих операций.

52) Что такое Storage Engine?

Storage Engine — это компонент базы данных, отвечающий за управление хранением данных на диске. Например, один механизм хранения может обеспечивать лучшую производительность для рабочих нагрузок, связанных с чтением, а другой — большую пропускную способность для операций записи.

53) Требует ли MongoDB много оперативной памяти?

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

Вопросы и ответы на собеседовании по MongoDB продвинутого уровня

54) Чем отличаются MongoDB и CouchDB?

MongoDB

CouchDB

MongoDB работает быстрее, чем CouchDB.

CouchDB более безопасна, чем MongoDB.

В MongoDB нет триггеров.

В CouchDB есть триггеры.

MongoDB сериализует JSON-данные в BSON

CouchDB не хранит данные в формате JSON

55) Объясните, что такое ограниченная коллекция?

Ограниченная (capped) коллекция — это особый вид коллекции в MongoDB, размер которой мы можем ограничить. Синтаксис ограниченной коллекции выглядит следующим образом:

db.createCollection(<collection_name>, {capped: Boolean, autoIndexId: Boolean, size: Number, max : Number})

В этом синтаксисе содержатся следующие поля:

  • collection_name: Это поле представляет собой имя коллекции, которую мы создаем в качестве ограниченной коллекции.

  • capped: Capped — это логический флаг; он должен быть установлен в true, если мы хотим сделать коллекцию ограниченной. По умолчанию его значение равно false.

  • autoIndexed: Это флаг, который мы используем для автоиндексации. Если этот флаг равен true, то индексы будут создаваться автоматически. Если флаг равен false, то индексы создаваться автоматически не будут.

  • size: Size — это параметр, представляющий максимальный объем документов в байтах. Это обязательное поле в контексте ограниченных коллекций.

  • max: Max — это параметр, представляющий наибольшее количество документов, которое допускает коллекция. 

56) Как выполнять операции Join в MongoDB?

Начиная с MongoDB3.2, мы можем выполнять операцию Join. Новый оператор $lookup, входящий в состав конвейера агрегации, аналогичен левому внешнему join. Пример:

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

57) Какие механизмы хранения данных используются в MongoDB?

WiredTiger и MMAPv1 — два механизма хранения данных, используемых в MongoDB.

58) Как настроить размер кэша в MongoDB?

В MongoDB мы не можем настраивать кэш. MongoDB использует свободное пространство в системе автоматически, используя файлы с привязкой к памяти.

59) Как контролировать производительность MongoDB?

Мы можем управлять производительностью MongoDB с помощью:

  • Устранение дефицита ресурсов

  • Определение количества соединений

  • Профилирование баз данных

  • Полный захват диагностических данных

60) Каковы агрегатные функции MongoDB?

Ниже перечислены агрегатные функции MongoDB:

  • AVG

  • Sum

  • Min

  • Max

  • First

  • Push

  • addTo Set

  • Last

61) Какие CRUD-операции есть в MongoDB?

Ниже перечислены CRUD-операции в MongoDB:

Create-db.collection.insert();

Read-db.collection.find();

Update-db.collection.update();

Delete-db.collection.remove();

62) Какие типы данных существуют в MongoDB?

Ниже перечислены типы данных MongoDB:

  • Целое число (Integer)

  • Строка (String)

  • Логическая переменная (Boolean)

  • Массив (Array)

  • Вещественное число двойной точности (Double)

  • Дата (Date)

  • Таймстемп (Timestamp)

  • Регулярное выражение (Regular Expression)

63) Требуется ли вызывать "get last error" для выполнения долговременной записи?

Нет, вызывать "get last error" не требуется. Сервер ведет себя так, как будто она была вызвана. "get last error" позволяет нам получить подтверждение того, что операция записи зафиксирована. Вы получите подтверждение, но надежность и безопасность записи от этого не зависят.

64) Что происходит, когда сегмент работает медленно или вовсе не работает во время запроса?

Если сегмент работает медленно, запрос возвращает ошибку до тех пор, пока не будут исправлены параметры запроса. Когда сегмент реагирует медленно, MongoDB ожидает его.

65) Как использовать первичный ключ в MongoDB?

Поле "_id" является негласным первичным ключом в MongoDB. И оно является уникальным значением. Если мы ничего не зададим в поле "_id", то оно систематически будет заполняться "MongoDB Id Object". Тем не менее, мы можем хранить в этом поле любую уникальную информацию.

66) Как увидеть соединения, используемые MongoDB?

Для просмотра соединений, используемых MongoDB, мы используем команду db_adminCommand("connPoolStats").

67) Когда "moveChunk" не работает, нужно ли очищать частично перемещенные документы?

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

68) Как запустить инстанс или сервер MongoDB?

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

  • Во-первых, откройте командную строку и выполните файл "mongod.exe".

  • Далее, мы переходим по пути, по которому мы установили MongoDB.

  • Перейдите в папку bin, найдите файл "mongod.exe" и дважды кликните по нему.

  • Мы можем перейти в папку, например, "C: MongoDB/bin" и ввести mongo для подключения MongoDB с помощью оболочки Shell.

69) Различия между MongoDB и РСУБД

Критерий для сравнения

MongoDB

РСУБД

Определение

Это нереляционная система управления базами данных

Это реляционная система управления базами данных

Работа

Это документо-ориентированная система баз данных с использованием полей и документов

Она работает с отношениями между таблицами, в которых используются строки и столбцы

Масштабируемость

Вертикальная и горизонтальная масштабируемость

Она вертикально масштабируема

Производительность

Производительность увеличивается по мере роста числа процессоров

Производительность увеличивается с ростом объема оперативной памяти

Иерархическое хранение данных

В ней имеется встроенная возможность хранения иерархических данных

Трудно хранить иерархические данные

Поддержка join’ов

Не поддерживает сложносоставные join’ы

Поддерживает сложные соединения join’ы

Язык запросов

Для запросов к базе данных используется BSON

Для запроса к базе данных используется SQL

Поддержка Javascript

Обеспечивает поддержку javascript-клиентов для выполнения запросов к базе данных

Не обеспечивает поддержку запросов к базе данных со стороны javascript-клиентов

70) Как приложения получают доступ к модификациям данных в реальном времени в MongoDB?

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

71) Каковы в MongoDB есть виды индексов?

Ниже перечислены различные виды индексов в MongoDB:

  • Индекс по умолчанию (default): Это "_id", который создает MongoDB.

  • Составной (compound): Применяется для нескольких полей.

  • Множество ключей (multi-key): Индексирует данные массива.

  • Одно поле (single field): Сортировка и индексирование по одному полю.

  • Геопространственный (geospatial): Применяется для запроса данных о местоположении.

  • Хешированный (hashed): Индексирует хэши нескольких полей.

Вопросы и ответы на собеседовании по MongoDB для опытных специалистов

71) Дайте определение BSON?

Двоичный JSON или BSON — это двоично-закодированный формат JSON. BSON расширяет JSON и предлагает различные поля и типы данных.

72) Как MongoDB хранит данные?

Поскольку MongoDB является документо-ориентированной базой данных, документы хранятся в формате Binary Javascript Object Notation или BSON, который представляет собой двоично-закодированный формат JSON.

73) Поддерживает ли MongoDB ACID-транзакции? Дайте определение ACID-транзакции?

Да, MongoDB поддерживает ACID-транзакции. ACID означает "атомарность", "согласованность", "изоляция" и "долговечность". Менеджер транзакций гарантирует, что мы удовлетворяем этим атрибутам.  

74) Объясните составные элементы и структуру ObjectID в MongoDB?

В MongoDB ObjectID связан с полем "_id", и MongoDB использует его в качестве значения по умолчанию для "_id" в документах. Для генерации "ObjectID" мы используем следующий синтаксис:

ObjectId([SomeHexaDecimalValue])

Пример:

ObjectId() = newObjectId

ObjectID имеет следующие методы:

  • str: Этот метод обеспечивает строковое представление идентификатора объекта.

  • valueOf(): Этот метод возвращает шестнадцатеричное представление ObjectId.

  • getTimeStamp(): Этот метод возвращает таймстемп ObjectId.

  • toString(): Этот метод возвращает строковое представление ObjectId в формате "ObjectId(haxstring)".

75) Как найти элементы массива с несколькими критериями?

Например, если у нас есть следующие документы:

{ _id: 1, numbers: [1000, -1000]]
{ _id: 2, numbers: [500]]

Мы выполняем следующую команду:

db.example.find( { numbers: { $elemMatch: { $gt: -10, $lt: 10 } } } );

76) Как можно отсортировать пользовательскую функцию? Например, если x и y — целые числа, то как вычислить "x-y"?

Выполнив следующий код, мы вычислим x-y.

db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a – doc2.a
})
});
 
Versus the equivalent client-side sort:
db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a – doc2.b
});

Используя конвейер агрегации и оператор "" class="formula inline">orderby", можно производить сортировку.

77) До какой степени данные расширяются в MongoDB?

MongoDB зиждется на коллекциях. Поэтому мы храним все субстанции в единой массе или куске. Когда у нас есть дополнительный временной слот, то у нас будет несколько вариантов достижения данных в виде слайсов, а когда у нас несколько кусков, то данные будут расширены до множества слайсов. 

78) Как получить базы данных MongoDB в Javascript-массиве?

В терминале MongoDB мы можем выполнить команду "Show DBS" для получения существующих баз данных. Чтобы получить базы данных MongoDB программным путем, выполним следующий код:

use admin
dbs = db.runCommand({listDatabases: 1})
dbNames = []
for (var i in dbs.databases) { dbNames.push(dbs.databases[i].name) }
Hopefully this will help someone else.
The below will create an array of the names of the database:
var connection = new Mongo();
var dbNames = connection.getDBNames();

79) Как обновить объект во вложенном массиве?

Выполнив следующий код, мы обновим объект:

Skip code block
{
“_id” : ObjectId(“4faaba123412d654fe83hg876”),
“user_id” : 123456,
“total” : 100,
“items” : [
{
“item_name” : “my_item_one”,
“price” : 20
},
{
“item_name” : “my_item_two”,
“price” : 50
},
{
“item_name” : “my_item_three”,
“price” : 30
}
]
}

80) Как получить конкретный встроенный документ в коллекции MongoDB?

У меня есть коллекция, в которой есть встроенный документ, известный как notes. 

Skip code block
{
“_id” : ObjectId(“4f7ee46e08403d063ab0b4f9”),
“name” : “MongoDB”,
“notes” : [
{
“title” : “Hello MongoDB”,
“content” : “Hello MongoDB”
},
{
“title” : “ReplicaSet MongoDB”,
“content” : “ReplicaSet MongoDB”
}
]
}

81) Как сделать запрос со вложенным join?

Для запросов со вложенными join мы используем "tested". Например:

{“_id” : ObjectId( “abcd” ),
“className” : “com.myUser”,
“reg” : 12345,
“test” : [
{ “className” : “com.abc”,
“testid” : “pqrs” } ] }

82) Можно ли в одном инстансе MongoDB выполнять более одной Javascript-операции?

Да, мы можем выполнять несколько операций javascript в одном инстансе MongoDB.

Уверенные навыки по созданию отказоустойчивых кластеров Mongo можно получить на онлайн-курсе MongoDB в Отус.

Комментарии (3)


  1. QtRoS
    18.10.2023 17:00
    +6

    Нам нужно найти все сообщения пользователей, чей город "Hyderabad".

    И все, точка, конец ответа на вопрос. Замечательное предложение, висящее в воздухе. И вся статья не особо лучше по качеству. Зачем это на Хабре?..

    P.S. Только, пожалуйста, не апеллируйте к тому, что это перевод. Ибо какая ценность переводить мусор?


  1. alfss
    18.10.2023 17:00
    +2

    Что это за генерация ? Выглядит как набор ответов на вопросы от ChatGPT . Ответы такие , что ничего не проясняют…


  1. LeshaRB
    18.10.2023 17:00
    +1

    Все в перемешку
    В одних ответах используется sudo, в других mongo.exe

    Короче просто каша