Skip to content

Instantly share code, notes, and snippets.

@shcoderAlex
Created October 24, 2013 04:48
Show Gist options
  • Select an option

  • Save shcoderAlex/7131522 to your computer and use it in GitHub Desktop.

Select an option

Save shcoderAlex/7131522 to your computer and use it in GitHub Desktop.

Revisions

  1. shcoderAlex created this gist Oct 24, 2013.
    103 changes: 103 additions & 0 deletions new_gist_file
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,103 @@
    /*
    * Конспект по MongoDB
    * @author Alexey Vikarchuk
    * @editor Amantay Eldar
    */
    //========================= ~INSTALLING ==========================

    INSTALLING / УСТАНОВКА:
    Самый простой способ установки MongoDB - это установка через официальный .deb пакет для LinuxUbuntu (Linux Mint и прочих ubuntu-форков).
    1. Установите 10gen GnuPG Public Key:
    $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
    2. Создайте файл в списке источников:
    $ sudo nano /etc/apt/sources.list.d/10gen.list
    И добавьте туда строку:
    deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
    3. Обновите список источников
    $ sudo apt-get update
    4. Начните установку (минимальный размер пакета 87MB):
    $ sudo apt-get install mongodb-10gen

    # Для установки специфичной версии MongoDB можно использовать команду:
    # $ sudo apt-get install mongodb-10gen=2.2.3
    # Но тем не менее, apt-get в будущем обновит MongoDb когда появится новая версия.
    # Чтобы этого избежать, нужно "заколоть" (заморозить) MongoDb на текущей версии:
    # echo "mongodb-10gen hold" | dpkg --set-selections

    Конфигурационный файл пакета MongoDB расположен в: /etc/mongodb.conf
    Контрольный скрипт расположен в: /etc/init.d/mongodb.
    Собственные data-файлы MongoDB хранит в: /var/lib/mongodb
    Логи в:/var/log/mongodb
    MongoDB запускается под собственным пользователем: mongodb
    # Если вы измените пользователя запуска MongoDB, вам нужно изменить права доступа в /var/lib/mongodb и /var/log/mongodb directories.

    //========================= ~END OF INSTALLING ==========================


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

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

    Чтобы увидеть все коллекции
    db.getCollectionNames()
    Посмотреть все документы
    db.collection.find()
    Получить нужные поля
    db.nameCollection.find({key:value},{key:1})
    Исключить не нужные поля
    db.nameCollection.find({key:value},{key:0})
    Вставка
    db.nameCollection.insert(json)
    Удаление коллекции
    db.nameCollection.remove()
    Выборка
    db.nameCollection.find({key:value})
    Логические операторы
    $lt - Меньше
    $lte - Меньше и равно
    $gt - больше
    $gte - больше и равно
    db.nameCollection.find({key:{$gt: value}})
    чтобы проверить наличие или отсутсвие поля $exists
    db.nameCollection.find({key:{$exists: false(или true)}})
    Оператор $or - ИЛИ
    db.nameCollection.find({$or: [{key:value}, {key1:value1}]})

    Самое интересное это та простота, с которой делается выборка по значению массива: {loves: 'watermelon'} вернёт нам все документы, у которых watermelon является одним из значений поля loves

    Селекторы могут использоватся в find(), update(), remove(), count().

    Update:

    В простейшем апдейте функция принимает 2 аргумента первый это селектор второе это ключ и новое значение.
    db.nameCollection.update({value:key}, {key:newValue})
    Один важный момент при таком запросе все поля затрутся кроме изменяемого. Возможно это и будет нужно, но для обновления одного поля и не затирание всех остальных стоит использовать модификатор $set
    db.nameCollection.update({key:value}, {$set:{key:newValue}})
    Если нужно удалить поле $unset
    db.nameCollection.update({key:value}, {$unset:{key:newValue}})
    Есть так же ряд других модификаторов например $inc - служит для того чтобы увеличить или уменьшить числовое значение.
    db.nameCollection.update({key, value}, {$inc:{key:+2}})
    Так же можно добавить элемент в массив модификатором $push
    db.nameCollection.update({key, value}, {$push:{key:newElement}})
    Ссылка на доку http://ru.wiki.mongodb.org/display/DOCS/Updating

    Монго не перестаёт удивлять и там есть такая фишка: Обновление и вставка. Если не найден элемент по селекту то монго его создаст, а если найдет то обновит. Всего навсего надо передать 3 параметром true.
    db.nameCollecDtion.update({key:value}, {$set:{key:newValue}}, true)
    Стоп, стоп это не всё что может дать нам монго в плане обновлений. У апдейта есть четвертый параметр который отвечает за мульти обновления, если не использовать его, то будет обновлён первый найденый, а с ним обновятся все. Просто установити 4 параметр в true
    db.nameCollecDtion.update({key:value}, {$set:{key:newValue}}, false, true)

    Курсоры:

    Так же монго позволяет нам использовать сортировку. Надо только добавить к find().sort() в котором указать поле и метод сортирования: 1 по возрастанию -1 по убыванияю.
    db.nameCollection.find().sort({key:-1, key1:1})
    Монго использует индексы для сортировки. Без индекса монго ограничивает размер сортируемых данных. Если надо отсортировать большой объем данных не используя индекс, вы получите ошибку.

    Разбиение на страницы:

    Ну как без этого у монго есть два метода limit и skip.
    limit - ограничивает количество, а skip пропускает нужное количество элементов
    db.nameCollection.find().sort().limit(2).skip(1)
    Count:
    db.nameCollection.find().count()