Created
October 24, 2013 04:48
-
-
Save shcoderAlex/7131522 to your computer and use it in GitHub Desktop.
Инструкция по монге
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Конспект по 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