В прошлом уроке мы запустили сервер и увидели приглашение test>. Теперь учимся с ним разговаривать. Команд для начала нужно совсем немного: узнать, где ты, переключиться на нужную базу, положить документ, найти его и посчитать. Заодно выясним главную особенность mongosh: это не отдельный язык запросов, а JavaScript.
Пульт, который понимает JavaScript
В psql было два языка: SQL для данных и команды с обратной косой чертой для самого клиента. В mongosh язык один, и это JavaScript. Запрос к базе выглядит как вызов метода у объекта:
db.books.find()
Читается справа налево по смыслу и слева направо по записи: в текущей базе db возьми коллекцию books и вызови у неё метод find. Ни точки с запятой, ни отдельного синтаксиса: обычный вызов функции.
Рядом живут несколько команд в стиле старой оболочки, без скобок: use, show dbs, show collections. Это исключения, их немного.
Где я и что тут есть
show dbs показывает базы на сервере и сколько они занимают:
admin 8.00 KiB
config 12.00 KiB
local 8.00 KiB
shop 16.00 KiB
Базы admin, config и local служебные, их не трогаем. Базу, в которой ты работаешь, видно в приглашении. Узнать её имя можно и командой db.getName().
use переключает на другую базу:
test> use library
switched to db library
library>
Базы library ещё нет, и mongosh не возражает. Как мы знаем из урока про коллекции, база появится при первой записи. Пока в ней пусто, show dbs её не покажет.
show collections перечисляет коллекции текущей базы. Сейчас список пуст, ответом будет пустая строка.
Положить и найти
Кладём две книги в коллекцию books методом insertOne:
db.books.insertOne({ title: 'Шинель', author: 'Гоголь', pages: 64 })
db.books.insertOne({ title: 'Нос', author: 'Гоголь', pages: 48, year: 1836 })
{
acknowledged: true,
insertedId: ObjectId('6ac9371af0f4c63b0a775dfa')
}
acknowledged: true значит, что сервер принял запись, а insertedId это идентификатор нового документа. У тебя он будет другим. Подробно про вставку поговорим в пятом уроке.
find() без аргументов возвращает все документы коллекции:
db.books.find()
[
{
_id: ObjectId('6ac9371af0f4c63b0a775dfa'),
title: 'Шинель',
author: 'Гоголь',
pages: 64
},
{
_id: ObjectId('6ac9371af0f4c63b0a775dfb'),
title: 'Нос',
author: 'Гоголь',
pages: 48,
year: 1836
}
]
Чтобы найти конкретные документы, передай в find образец: документ с полями, которые должны совпасть. Образец называют фильтром:
db.books.find({ author: 'Гоголь' })
Это аналог SELECT * FROM books WHERE author = 'Гоголь'. findOne возвращает первый подходящий документ, а не список:
db.books.findOne({ title: 'Нос' })
{
_id: ObjectId('6ac9371af0f4c63b0a775dfb'),
title: 'Нос',
author: 'Гоголь',
pages: 48,
year: 1836
}
Если ничего не нашлось, findOne вернёт null, а find пустой список. Посчитать документы помогает countDocuments:
db.books.countDocuments()
2
урок из курса
Урок из курса «MongoDB с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.