Skip to content

Instantly share code, notes, and snippets.

@DKepov
Forked from shcoderAlex/new_gist_file
Created July 11, 2016 09:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DKepov/e0a934f17145a03c74fff62db86eb7c6 to your computer and use it in GitHub Desktop.
Save DKepov/e0a934f17145a03c74fff62db86eb7c6 to your computer and use it in GitHub Desktop.
Инструкция по монге
/*
* Конспект по 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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment