Введение
Системы баз данных, такие как MongoDB, обычно используются с внешним приложением, которое подключается к серверу базы данных и выполняет такие операции, как чтение и обработка данных или добавление новых записей. В таких случаях вы не взаимодействуете напрямую с сервером базы данных. Прямой доступ может потребоваться для выполнения административных задач в базе данных или для выполнения нерегламентированных запросов к ней.
Именно здесь на помощь приходит оболочка MongoDB. Оболочка MongoDB — это интерактивная консоль, которую можно использовать для подключения к серверу базы данных и выполнения команд на нём, что позволяет выполнять административные задачи, а также напрямую читать, записывать и обрабатывать данные. Оболочка MongoDB позволяет подключаться к базе данных через командную строку и работать с ней интерактивно из окна терминала. Она также позволяет запускать внешние скрипты для более простого выполнения повторяющихся задач.
В этом руководстве вы будете использовать оболочку MongoDB для подключения к базе данных MongoDB и интерактивного выполнения запросов. Вы также воспользуетесь встроенной справочной системой и функциями автодополнения, доступными в оболочке.
Предпосылки
- Сервер с обычным пользователем (не root) с привилегиями sudo и брандмауэром, настроенным с помощью UFW. Данное руководство проверено на сервере под управлением Ubuntu 20.04.
- MongoDB установлена на вашем сервере.
- Безопасность вашего экземпляра сервера MongoDB обеспечивается путем включения аутентификации и создания административного пользователя.
Примечание: Соответствующие руководства по настройке сервера, установке и безопасной установке MongoDB относятся к Ubuntu 20.04. Данное руководство посвящено самой MongoDB, а не базовой операционной системе. При включенной аутентификации система, как правило, будет работать с любой установленной MongoDB, независимо от операционной системы.
Шаг 1 — Подключение к серверу MongoDB
Чтобы открыть оболочку MongoDB, выполните команду mongo в командной строке сервера. По умолчанию команда mongo открывает оболочку, которая подключается к локально установленному экземпляру MongoDB, работающему на порту 27017.
Запустите команду mongo без дополнительных параметров:
mongo
В результате будет выведено приветственное сообщение с информацией о сервере, к которому подключена оболочка, а также об установленной версии MongoDB. В следующем примере показан сервер MongoDB, работающий по адресу 127.0.0.1 (интерфейс обратной связи, представляющий localhost) на порту MongoDB по умолчанию (27017) и версии 4.4.6.
Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6Попробуйте вывести список всех баз данных на сервере. После команды shell введите show dbs и нажмите ENTER:
show dbsЕсли вы выполнили предварительные требования руководства «Как защитить MongoDB», эта команда не вернёт никаких результатов. Причина в том, что, несмотря на то, что сервер MongoDB запущен и оболочка смогла к нему подключиться, вы не предоставили никаких данных для аутентификации. В связи с этим у вас нет прав доступа для работы с базами данных сервера, и команда show dbs ничего не вернёт.
Выйдите, введя следующую команду:
exitОболочка Mongo выведет краткое прощальное сообщение и вернет вас в системную оболочку:
Output
byeПримечание: вместо ввода команды выхода можно закрыть оболочку, нажав сочетание клавиш CTRL+C.
Теперь снова подключите оболочку MongoDB к серверу базы данных, но на этот раз укажите имя пользователя и пароль для корректной аутентификации в вашем экземпляре MongoDB. Для этого необходимо указать дополнительные параметры командной строки, как в следующем примере:
mongo -u AdminSammy -p --authenticationDatabase adminЭта команда состоит из нескольких частей:
- -u: Этот флаг задает имя пользователя, используемое для аутентификации на сервере MongoDB.
- -p: Этот флаг указывает оболочке MongoDB использовать пароль при подключении к базе данных. После нажатия клавиши ENTER вам будет предложено ввести пароль в окне терминала.
- --authenticationDatabase: Этот параметр указывает базу данных аутентификации пользователей, с помощью которой вы входите в систему. Обычно административные учётные записи управляются в базе данных admin, но если ваша база данных аутентификации пользователей отличается, укажите её вместо admin.
Примечание: чтобы подключиться к серверу MongoDB, работающему на компьютере, отличном от localhost, вы можете добавить флаг -h, а затем IP-адрес вашего сервера в команду оболочки.
Введите пароль, установленный при установке, и вы снова получите доступ к оболочке.
Теперь еще раз выполните команду show dbs:
show dbs
На этот раз команда возвращает список всех баз данных в системе:
Output
admin 0.000GB
config 0.000GB
local 0.000GBПоскольку вы аутентифицированы как привилегированный пользователь, оболочка позволяет вам выполнять команды в любой из этих баз данных.
Теперь, когда вы успешно подключились к серверу MongoDB с помощью оболочки MongoDB, вы можете перейти к изучению того, как запускать команды в оболочке.
Шаг 2 — Выполнение команд
Как и другие интерфейсы командной строки, оболочка MongoDB принимает команды и возвращает желаемые результаты в стандартный поток вывода. Как упоминалось ранее, в оболочке MongoDB все команды вводятся в командной строке, что обозначается знаком «больше» (>). Нажатие клавиши ENTER после ввода команды немедленно её выполняет и возвращает вывод команды на экран.
Большинство команд в базе данных MongoDB выполняются для выбранной базы данных или набора баз данных. Текущая выбранная база данных представлена объектом db, доступным через оболочку. Вы можете проверить, какая база данных выбрана в данный момент, введя команду db в оболочке:
dbВ новом подключенном экземпляре оболочки выбранная база данных всегда называется test:
Output
test
Вы можете безопасно использовать эту базу данных для тестирования MongoDB и оболочки MongoDB. Чтобы переключиться на другую базу данных, выполните команду use, указав имя новой базы данных. Попробуйте переключиться на базу данных с именем fruit:
use fruits
Оболочка сообщит вам, что теперь вы используете новую базу данных:
Output
switched to db fruitsВы можете проверить это, введя db еще раз, чтобы узнать имя текущей выбранной базы данных:
dbНа этот раз вывод отражает новую базу данных:
Output
fruitsОбратите внимание, что вы не создали базу данных «Фрукты» явно. MongoDB позволяет выполнять команды с базами данных и коллекциями, которые ещё не существуют. Эти структуры создаются только при первой вставке в них объекта. Даже если вы успешно измените текущую базу данных на «Фрукты», эта база данных ещё не существует.
Попробуйте создать эту базу данных, вставив в неё объект. В следующем примере объясняется, как вставить объект в коллекцию «яблоки» в базе данных. Добавление этого объекта создаёт как базу данных «фрукты», так и коллекцию «яблоки».
Введите следующую строку в оболочке MongoDB и нажмите клавишу ENTER. Обратите внимание на выделенное имя коллекции (apples):
db.apples.insert()
Нажатие клавиши ENTER после открывающейся скобки открывает многострочную командную строку, позволяя вводить более длинные команды в нескольких строках. Команда вставки не будет полностью введена, пока вы не введете закрывающуюся скобку. До этого знак «больше» в строке приглашения изменится на многоточие (…).
Вам не нужно разбивать команды MongoDB на несколько строк, как в этом случае, но это может сделать длинные команды более удобными для чтения и понимания.
В следующей строке заключите объект в скобки ({ и }). В этом примере документа есть только одна пара «поле-значение»:
{name: 'Red Delicious'}
При повторном нажатии клавиши ENTER появится ещё одна строка, позволяющая добавить дополнительные параметры команды, такие как другие документы или любые спецификации, допускаемые методом вставки MongoDB. Но в этом примере вы можете завершить ввод и выполнить операцию, введя закрывающуюся скобку и нажав клавишу ENTER.
На этот раз оболочка Mongo записывает конец команды вставки и выполняет всю команду.
Output
WriteResult({ "nInserted" : 1 })После добавления нового объекта в базу данных будут существовать как база данных фруктов, так и коллекция яблок. Проверьте список доступных баз данных с помощью команды show dbs:
show dbs
И снова он возвращает список всех доступных баз данных, но на этот раз список включает базу данных фруктов:
Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GBКоманда show collections полезна для получения списка коллекций в текущей выбранной базе данных:
show collections
Поскольку выбрана база данных фруктов, будет возвращена только вновь созданная коллекция яблок:
Output
applesБлагодаря этому вы научились выполнять команды в оболочке MongoDB. Вы также создали объект экземпляра, который, в свою очередь, создал новую базу данных и новую коллекцию, которые теперь существуют на сервере.
На последнем этапе этого руководства вы узнаете, как вызывать вспомогательные функции оболочки MongoDB для лучшего понимания команд и более легкого их выполнения.
Шаг 3 — Получите интерактивную справку от оболочки
Оболочка MongoDB имеет встроенную справочную систему, с помощью которой можно получить информацию о доступных командах системы базы данных и объектах, хранящихся в ней. Эту вводную справочную страницу можно просмотреть непосредственно в командной строке оболочки с помощью команды help:
help
Оболочка MongoDB возвращает список более подробных справочных записей, которые можно использовать для получения дополнительной информации о конкретных частях оболочки, а также некоторые примеры наиболее часто используемых команд:
Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shellПервые две записи, выделенные в выводе этого примера, показывают, как выполнить вспомогательную команду для текущей базы данных и коллекции в текущей базе данных соответственно. В данном примере коллекция называется mycoll, но можно использовать любое допустимое имя.
Последняя выделенная строка – db.mycoll.find() – представляет собой пример метода извлечения объекта из коллекции с помощью команды find, которая выводит список объектов в данной коллекции. Поскольку коллекции – одни из наиболее часто используемых структур в базе данных Mongo, на этом этапе мы рассмотрим, как использовать методы find() и help() уровня коллекции Mongo.
Сначала откройте страницу руководства по пакету apples, чтобы найти команды, доступные для этого пакета:
db.apples.help()
Примечание: Хотя изначально команда help называлась просто help, при выполнении вспомогательного метода для объектов базы данных и коллекции необходимо добавить после команды пару скобок, чтобы она читалась как help(), а не просто help.
Результатом выполнения этой команды является длинный список доступных команд, которые можно выполнить над коллекцией яблок:
Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .В дополнение к четкому списку доступных команд, которые можно запустить в коллекции db.apples (каждая сопровождается кратким пояснением того, что делает команда), эта страница руководства также содержит примеры использования часто используемых команд, таких как find().
Эта встроенная справочная система служит удобным справочником доступных команд. Вы можете использовать её для проверки синтаксиса, если не можете вспомнить точное написание или допустимые части команды.
Поскольку из страниц руководства вы уже узнали, что find() можно использовать для извлечения объектов из коллекции, теперь вы можете извлечь объект, созданный в коллекции яблок на предыдущем шаге.
Однако этот пример демонстрирует другой интерактивный вспомогательный инструмент MongoDB, известный как автодополнение команд. Оболочка MongoDB следует шаблону, используемому в других популярных оболочках, таких как Bash или zsh, где нажатие клавиши TAB на клавиатуре автоматически завершает любую команду, которую вы вводите.
Начните с ввода следующего текста, но пока не нажимайте клавишу ENTER:
db.a
Вместо того, чтобы вводить полное имя коллекции, нажмите клавишу TAB на клавиатуре. Оболочка MongoDB выведет список всех доступных вариантов, начиная со следующего:
Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(В этом выводе перечислены три команды, обозначенные открытыми скобками, а также набор яблок.
Введите еще одну букву в Shell:
db.ap
Нажмите TAB ещё раз. На этот раз нет других вариантов начать с ap, и оболочка MongoDB автоматически дополнит ввод и введёт db.apples. Следуя тому же принципу, завершите команду find(), используя автодополнение TAB. Введите fi, но не нажимайте ENTER:
db.apples.fi
Нажатие клавиши TAB автоматически дополнит имя команды до db.apples.find. Повторное нажатие клавиши TAB на этом этапе выведет список дополнительных вариантов, но вы можете вручную добавить закрывающую скобку для выполнения команды find:
db.apples.find()
Оболочка отобразит список всех объектов в коллекции Apple. Среди них будет только один объект, импортированный ранее:
Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }Результат
В этой статье вы познакомитесь с оболочкой MongoDB. Она позволяет добавлять новые объекты в базу данных, выполнять запросы к существующим коллекциям и выполнять административные задачи по управлению базой данных, её данными и пользователями.









