Готовы приступить к изучению MongoDB, одной из самых крутых технологий для веб-разработчиков?
В этой новой серии вы перейдете от новичка к профессионалу и сможете использовать Mongo так же легко, как MySQL в своих веб-приложениях. Но сначала давайте посмотрим на основы.
Почему MongoDB?
Что если бы вы могли хранить программные модели почти так же, как вы их моделируете?
В объектно-ориентированной разработке нам рекомендуется подходить к разработке кода с помощью логических моделей, чтобы мы могли с большей готовностью концептуализировать их в своем уме. Когда мы сделаем это, мы сможем лучше различать логические операции, используемые для взаимодействия с ним, и информацию, которую он будет содержать в разное время.
Что если бы вы могли хранить программные модели почти так же, как вы их моделируете? Что если бы вы могли хранить их такими, как они есть, а не в виде ряда строк в таблицах? Узнав о MongoDB, вы сможете сделать именно это!
В этой серии статей мы изучим все от основ MongoDb, таких как создание, обновление и удаление баз данных и записей, до возможности выполнять сложные поиски данных и анализ элементарных данных с помощью MapReduce. Итак, без лишних слов — давайте начнем!
Примечание. Этот учебник сделан с точки зрения системы на основе NIX, такой как Mac OSX, Linux BSD и так далее. Но вы должны быть в состоянии следовать, если вы используете Windows достаточно хорошо, поскольку есть сборки для большинства платформ.
Шаг 1: Установка Mongo
Итак, вот где начинается самое интересное. Мы собираемся начать с установки Mongo. Перейдите на веб-сайт MongoDb и нажмите на ссылку для загрузки.
Это приведет вас на страницу, где вы сможете получить сборку для вашей платформы и архитектуры.
Этот учебник охватывает только стабильные выпуски, поэтому, пожалуйста, не берите ночные сборки. После загрузки установите его в соответствии с требованиями вашей платформы.
Если вы работаете на машине с Nix, используйте менеджер пакетов для установки последней версии для вашей платформы.
С этим из пути, запустите терминал и введите mongo
. Это откроет оболочку Монго и позволит нам начать. Все хорошо, вы увидите вывод, подобный приведенному ниже:
Если вы видите это, тогда вы готовы к работе.
Шаг 2. Создание базы данных / вставка записей
Изначально база данных не создается. Но не волнуйтесь, они сразу же будут созданы, когда мы начнем вставлять наши записи, что мы собираемся сделать прямо сейчас. Скопируйте содержимое ниже и вставьте его в оболочку mongo
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
db.nettuts.insert({
first: ‘matthew’,
last: ‘setter’,
dob: ’21/04/1978′,
gender: ‘m’,
hair_colour: ‘brown’,
occupation: ‘developer’,
nationality: ‘australian’
});
db.nettuts.insert({
first: ‘james’,
last: ‘caan’,
dob: ’26/03/1940′,
gender: ‘m’,
hair_colour: ‘brown’,
occupation: ‘actor’,
nationality: ‘american’
});
db.nettuts.insert({
first: ‘arnold’,
last: ‘schwarzenegger’,
dob: ’03/06/1925′,
gender: ‘m’,
hair_colour: ‘brown’,
occupation: ‘actor’,
nationality: ‘american’
});
db.nettuts.insert({
first: ‘tony’,
last: ‘curtis’,
dob: ’21/04/1978′,
gender: ‘m’,
hair_colour: ‘brown’,
occupation: ‘developer’,
nationality: ‘american’
});
db.nettuts.insert({
first: ‘jamie lee’,
last: ‘curtis’,
dob: ’22/11/1958′,
gender: ‘f’,
hair_colour: ‘brown’,
occupation: ‘actor’,
nationality: ‘american’
});
db.nettuts.insert({
first: ‘michael’,
last: ‘caine’,
dob: ’14/03/1933′,
gender: ‘m’,
hair_colour: ‘brown’,
occupation: ‘actor’,
nationality: ‘english’
});
db.nettuts.insert({
first: ‘judi’,
last: ‘dench’,
dob: ’09/12/1934′,
gender: ‘f’,
hair_colour: ‘white’,
occupation: ‘actress’,
nationality: ‘english’
});
|
Все хорошо? Отлично! Чтобы подтвердить, что база данных и сопутствующие записи были созданы, введите следующую команду:
1
|
db.nettuts.find()
|
Если все пошло по плану, то вы увидите следующий вывод:
Это показывает, что все записи были созданы в базе данных. Прежде чем идти дальше, нужно отметить одну вещь — поле id
. Это автоматически генерируется Mongo для вас, если вы не указали идентификатор. Причина в том, что каждая запись должна иметь уникальное поле id
.
Вы можете видеть, что у нас есть одна запись для каждого из тех, которые мы вставляем — теперь мы готовы начать запрашивать их.
Шаг 3: Поиск записей
Вы помните предыдущую команду? Он извлекал и отображал каждую запись в базе данных. Полезно, да, но как вы можете быть более конкретным? Как вы находите всех актеров женского пола, отфильтровывающих мужчин? Это хороший вопрос, и ответ — селекторы.
Селекторы
Селекторы для Mongo, а where
— для SQL. Что касается предложений where, селекторы Mongo позволяют нам делать следующее:
- указать критерии, которые
MUST
соответствовать. то есть предложениеAND
- укажите критерии, которые могут при желании соответствовать. т. е. предложение
OR
- указать критерии, которые
MUST
существовать - и многое другое…
Записи, которые ДОЛЖНЫ совпадать
Давайте начнем с основного селектора. Скажем, что мы хотим найти all actors that are female
, Для этого вам нужно выполнить следующую команду:
1
|
db.nettuts.find({gender: ‘f’});
|
Здесь мы указали, что пол должен быть равен «F».
Выполнение этой команды вернет следующий вывод:
Что если мы хотим найти актеров мужского пола? Запустите следующую команду:
1
|
db.nettuts.find({gender: ‘m’});
|
Мы получим следующие результаты:
Поиск по нескольким критериям
Давайте сделаем это на ступеньку выше. Мы будем искать английских актеров мужского пола.
1
|
db.nettuts.find({gender: ‘m’, $or: [{nationality: ‘english’}]});
|
Запуск, который вернет следующие результаты:
А как насчет мужских актеров, которые англичане или американцы? Легко! Давайте изменим нашу предыдущую команду, чтобы включить американцев:
1
|
db.nettuts.find({gender: ‘m’, $or: [{nationality: ‘english’}, {nationality: ‘american’}]});
|
По этому запросу мы увидим следующие результаты:
Шаг 4: Сортировка записей
Что если мы хотим отсортировать записи, скажем, по имени или национальности? Как и в SQL, Mongo предоставляет команду sort
. Команда, как и команда find
принимает список опций для определения порядка сортировки.
В отличие от SQL, мы указываем возрастание и убывание по-разному. Мы делаем это следующим образом:
- По возрастанию: -1
- По убыванию: 1
Давайте посмотрим на пример:
1
|
db.nettuts.find({gender: ‘m’, $or: [{nationality: ‘english’}, {nationality: ‘american’}]}).sort({nationality: -1});
|
В этом примере извлекаются все актеры мужского, английского или американского происхождения и сортируются в порядке убывания национальности.
Как насчет сортировки по национальности в порядке убывания и имени в порядке возрастания? Совершенно никаких проблем! Посмотрите на запрос ниже, который является модифицированной версией последнего, который мы запустили.
1
|
db.nettuts.find({gender: ‘m’, $or: [{nationality: ‘english’}, {nationality: ‘american’}]}).sort({nationality: -1, first: 1});
|
На этот раз мы получаем следующие результаты и т. Д.
Вы можете видеть, что на этот раз Арнольд Шварценеггер находится перед Тони Кертисом.
Шаг 5: Ограничение записей
Что если бы у нас был довольно большой набор данных (нам повезло, мы этого не делаем), и мы хотели бы ограничить результаты только двумя? Mongo предоставляет команду limit, аналогичную MySQL, и позволяет нам это делать. Давайте обновим наш предыдущий запрос и вернем только 2 записи. Посмотрите на следующую команду:
1
|
db.nettuts.find({gender: ‘m’, $or: [{nationality: ‘english’}, {nationality: ‘american’}]}).limit(2);
|
Из этой команды мы получим следующие результаты:
Если мы хотели третью и четвертую записи, т.е. пропустить первые две? Еще раз, у Монго есть функция для этого. Посмотрите на дальнейшую настройку предыдущей команды:
1
|
db.nettuts.find({gender: ‘m’, $or: [{nationality: ‘english’}, {nationality: ‘american’}]}).limit(2).skip(2);
|
Запуск, который вернет следующие результаты:
Из исходного набора результатов видно, что первые два были пропущены.
Шаг 6: Обновление записей
Как и ожидалось, Mongo также предоставляет возможность обновлять записи. Как и в случае метода find
и запросов SQL, вам необходимо указать критерии для записи, которую вы хотите изменить, а затем данные в этой записи, которые будут изменены.
Допустим, нам нужно обновить запись для Джеймса Каана, указав, что его волосы седые, а не коричневые. Хорошо для этого мы запускаем функцию обновления. Посмотрите на пример ниже:
1
|
db.nettuts.update({first: ‘james’, last: ‘caan’}, {$set: {hair_colour: ‘brown’}});
|
Теперь, когда вы выполните это, если все прошло хорошо, не будет ничего, чтобы указать, был ли это успех или неудача. Чтобы выяснить, правильно ли обновлялась запись, нам нужно ее найти. Итак, давайте сделаем это.
1
|
db.nettuts.find({first: ‘james’, last: ‘caan’});
|
После этого вы увидите следующий результат:
Это показывает, что обновление работало. Одно слово предостережения: если вы не передадите модификатор $set
, то вы замените запись , если она доступна, вместо ее обновления . Быть осторожен!
Шаг 7: Удаление записей
Я думаю, что на этом этапе вы действительно начали понимать, как работать с Монго. Правильно, если вы хотите удалить запись, вы должны передать набор селекторов, как и в случае с SQL, чтобы определить набор записей для удаления. Если вы этого не сделаете, вы удалите все записи — и базу данных.
Итак, допустим, что мы не хотим, чтобы Джеймс Каан был в нашем списке актеров. Давайте удалим его из базы данных, используя следующую команду:
1
|
db.nettuts.remove({first: ‘james’, last: ‘caan’});
|
Как и в случае с обновлением, никаких видимых выходных данных, указывающих, были ли мы успешными или нет, не предоставлено — поэтому давайте проведем поиск, чтобы проверить дважды.
1
|
db.nettuts.find({first: ‘james’, last: ‘caan’});
|
После этого вы не увидите никаких результатов. Если это то, что вы нашли, то мы успешно удалили Джеймса Каана из нашей базы данных. Но что, если мы хотим удалить все записи из базы данных?
Ну, чтобы сделать это, просто удалите селекторы из предыдущего вызова, чтобы удалить, как показано ниже.
1
2
|
db.nettuts.remove();
db.nettuts.find();
|
После выполнения обеих команд, приведенных выше, мы не увидим никакого вывода, указывающего, что база данных со всеми записями теперь удалена.
Вывод
В этом быстром введении в использование MongoDB мы рассмотрели:
- Что такое Монго
- Как его установить
- Как создавать, находить, обновлять и удалять записи
С этим знанием вы можете пойти, попрактиковаться и узнать больше об этой замечательной технологии. Если вам нужна дополнительная информация, не стесняйтесь посетить веб-сайт MongoDb или подписаться на @mongodb в Twitter .
В следующем уроке мы начнем изучать сложные запросы. Так что следите за обновлениями и большое спасибо за чтение.
Обновление: вторая часть этой серии была размещена и может быть найдена здесь .