Статьи

Ускоренный курс для консоли MongoDB


MongoDB поставляется без графических инструментов для администрирования базы данных: в стиле Unix командная строка является стандартным способом ручного взаимодействия с базой данных.
В этой статье мы рассмотрим консоль и перевод классических SQL-запросов в модель Монго.

основной

Команда mongo запускает консоль, которая автоматически подключается к localhost и к базе данных по умолчанию. use databaseName переключится на databaseName, которое будет создано, если оно не существует.

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

Синтаксис синтаксиса JavaScript API:

db.users.find({name:"Giorgio"});

найдет все объекты JSON с полем имени, равным «Giorgio», внутри коллекции пользователей в текущей базе данных.

Консоль на самом деле является полнофункциональной консолью JavaScript, поэтому вы можете сохранять результаты запросов, объявлять промежуточные переменные или выполнять вычисления. Также обратите внимание, что оболочка, запущенная в консоли, имеет завершение табуляции, поэтому нажатие Tab будет пытаться завершить как имена методов, так и названия коллекций.

Выбрать, посчитать

Эквивалент запросов SELECT ничем не отличается от Java (или другого языка программирования) MongoDB API. Вы можете добавить столько полей, сколько захотите, и несуществующие будут игнорироваться при поиске; во всяком случае, весь объект всегда извлекается.

db.users.find({name:"Giorgio", type:"admin"});

извлекает пользователей с именем, равным «Giorgio» и типом, равным «admin».

db.users.count({type:"admin"});

извлекает пользователей с типом, равным «admin», который может даже не иметь поля имени.

db.users.count({"membership" : { $size : 0}});

использует специальный механизм сопоставления для извлечения пользователей, где поле членства является массивом без элементов.

Есть еще много условных операторов, таких как $ in, $ all, $ or, $ and или $ gt и его кузены. Синтаксис интуитивно понятен и следует этому примеру, но он четко указан в руководстве по расширенным запросам .

db.users.find({"platform.name":"facebook"});

имеет дело с подобъектами способом, более похожим на IN, чем на WHERE, потому что весь соответствующий объект возвращается как один из кортежей запроса:

{
    "_id": ObjectId("4fb0b135e4b06f9412f1c664"),
    "platform": [{
        "name": "facebook"
    }, {
        "name": "twitter"
    }],
    "name": "Giorgio Sironi"
}

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

Наконец, db.users.find (). Limit (3) разбивает результаты на страницы, но консоль не будет отображать больше, чем несколько, когда find () используется напрямую.

Обновить

Самый простой способ выполнения обновлений работает в памяти, но существуют также версии на месте, такие как метод findAndModify (). Я чувствовал, что этот подход был легче, когда я начал:

db.users.find().forEach(function (u) { printjson(u); } );

выведет на консоль всех пользователей, как консоль будет делать с результатом find (). Однако вы можете применить любое преобразование к элементам коллекции:

db.users.find().forEach(function (u) { if (u.location == 'Italy') { u.location = 'Italia'; db.users.save(u); } } );

пример запроса на обновление, который заменяет объекты коллекции пользователей местоположением, равным «Italy», на локализованную версию «Italia». Конечно, часть выбора может идти в find (), но вы можете выполнить дополнительную фильтрацию наиболее гибким способом внутри обратного вызова, переданного forEach (), тогда как find () ограничен модификаторами.

Удалить

db.users.drop () удалит всю коллекцию, которая вернется к своему начальному состоянию пустого и инстанцируемого при первой необходимости.

db.users.remove ({}) , подобно count () и find (), позволяет вам указать объект запроса для фильтрации удаляемых записей.

Лучшая команда удаления относится к первичному ключу, поэтому, если он сгенерирован, эта команда удалит один документ:

db.users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")});

Другие двоичные файлы

mongodump — это еще один двоичный файл, который можно использовать для создания дампа базы данных в сжатом формате:

mongodump -d databaseName -o .

в то время как mongorestore — противоположная команда, импортирует двоичные данные дампа в Mongo.

mongoimport и mongoexport — это специальные утилиты, которые преобразуют базу данных в файл CSV или JSON. mongostat и mongotop будут постоянно выводить статистику об общей нагрузке и распределении времени выполнения между коллекциями и базами данных.