MongoDB
Как писать запрос
Вкладка запроса MongoDB выполняет JavaScript через официальный драйвер Node.js. В коде доступны три имени:
db: база данных, в которой открыта вкладка.db.ordersиdb.getCollection('orders')возвращают коллекциюorders.ObjectId: создаёт ObjectId, напримерObjectId('65f1c0a2e4b0a1b2c3d4e5f6').params: значения из панели Параметры, разобранные как JSON-объект или массив.
Если весь запрос состоит из одного выражения, которое начинается с db, return можно не писать:
db.orders.find({ status: 'paid' }).sort({ createdAt: -1 })В более длинном коде заканчивайте запрос return. Можно использовать await:
const since = new Date(params.since);
return db.orders.aggregate([
{ $match: { createdAt: { $gte: since } } },
{ $group: { _id: '$status', total: { $sum: '$amount' } } },
]).toArray();Возвращённый курсор или массив превращается в строки, по одной на документ. Один документ даёт одну строку. Вызывать .toArray() у курсора не обязательно. Результат выводится постранично, а полный результат сохраняется для экспорта.
Код выполняется с правами пользователя подключения, поэтому методы записи, такие как insertOne, updateMany и deleteMany, меняют данные. Действует таймаут запроса, заданный для вкладки. Запуск, параметры и сохранённые запросы описаны на странице Редактор запросов.
Коллекции
В обозревателе у каждой базы есть группы Коллекции, Представления, Индексы, GridFS-бакеты и Запросы. Базы admin, local и config и коллекции system.* видны, только когда включён переключатель Системные объекты в верхней части обозревателя.
- Чтобы создать коллекцию, щёлкните Коллекции правой кнопкой и выберите Создать коллекцию.
- В контекстном меню коллекции есть Открыть данные, Новый запрос, Создать индекс, Импорт, Копировать данные, Переименовать, Показать метаданные и Удалить коллекцию.
- В открытой коллекции документы можно добавлять, изменять и удалять. Подробнее на странице Результаты и правка.
Показать метаданные выводит параметры коллекции, статистику, индексы, схему валидатора и поля, найденные в 10 самых новых документах.
Представления
Представления находятся в группе Представления. Представление можно открыть и прочитать его документы, посмотреть метаданные и удалить через Удалить представление. В таблице представления доступны только для чтения. Создать представление можно запросом, например db.createCollection('paid_orders', { viewOn: 'orders', pipeline: [...] }).
Индексы
Группа Индексы показывает все индексы в виде коллекция.индекс.
- Щёлкните правой кнопкой коллекцию или группу Индексы и выберите Создать индекс.
- Введите Название индекса и при необходимости выберите коллекцию в поле Объект.
- В блоке Поля добавьте поля и выберите тип ключа для каждого:
1,-1,textилиhashed. - В блоке Параметры включите Уникальный или включите TTL и укажите время жизни в секундах.
- Проверьте команду в Предпросмотр и нажмите Создать индекс.
Чтобы удалить индекс, щёлкните его правой кнопкой и выберите Удалить индекс. Индекс _id_ удалить нельзя.
Файлы GridFS
Бакет появляется в группе GridFS-бакеты, когда в базе есть обе коллекции <бакет>.files и <бакет>.chunks. Сами эти коллекции в группе Коллекции не показываются. Откройте бакет, чтобы увидеть список файлов с именем, размером, датой загрузки и типом содержимого.
- Загрузить: нажмите Загрузить на панели инструментов и выберите один или несколько файлов. Тип содержимого определяется по расширению файла.
- Скачать: выделите файлы и нажмите Скачать. Один файл сохраняется в выбранное место, несколько файлов в выбранную папку.
- Удалить: выделите файлы и нажмите Удалить.
План выполнения
Нажмите План в редакторе запросов. QueryLane откроет новую вкладку План: … и выполнит запрос с .explain('executionStats').
План строится для курсора find или aggregate. Запрос должен быть одним выражением db... или заканчиваться return курсора или .toArray(). QueryLane сам уберёт .toArray(). Если код уже вызывает .explain(...), он выполняется как есть.
return db.orders.find({ status: 'paid' }).toArray();Для запроса, который возвращает переменную, например return documents;, план не строится. Перепишите последнюю строку так, чтобы она возвращала курсор.