Uploaded by Рустам Абдырахманов

MONGO 11

advertisement
Создание базы данных и взаимодействие с ней
MONGO !== MANGO
В мире JavaScript и Node.js MongoDB зарекомендовала себя как базовая база данных. Это
«M» в популярных стеках MEAN и MERN, и обычно он считается более гибким и легким в
масштабировании, чем традиционные технологии баз данных, такие как MySQL.
Разберем 4 основные части при работе с MONGO DB

Создадим облачную базу данных с помощью MongoDB Atlas,

Подключимся к ней с помощью Node.js и Mongoose

Создадим модели для наших данных с помощью Mongoose

Предоставим конечные точки API для выполнения общих операций с базой данных.
Часть 1.
Создание облачной базы данных в MongoDB Atlas MongoDB Atlas - это официальная служба
облачных баз данных, предлагаемая MongoDB. Хотя мы могли бы настроить экземпляр
MongoDB локально, начать работу с Atlas намного проще. Мы будем использовать его
бесплатный уровень.
Регистрируемся тут
После успешного входа в систему вы должны создать свой первый проект (не стесняйтесь
называть его как хотите). Затем нажмите «Создать новый кластер». Вы должны увидеть такой
экран:
Выберите место нахождения вашего нового сервера. Это совершенно бесплатно, и вам
разрешается один бесплатный кластер для каждой учетной записи. В этом руководстве мы
сохраним имя кластера по умолчанию: «Cluster0».
Установить права пользователя
Теперь нам нужно определить пользователей и установить разрешения.
В меню навигации слева нажмите «Доступ к базе данных», затем нажмите «Добавить
нового пользователя». В этом руководстве мы создадим пользователя с именем «test_user»
с паролем «123456». (Для ваших собственных проектов я рекомендую гораздо более
безопасные учетные данные!)
Установить сетевые разрешения
Вот первое препятствие, которое вызвало у меня много проблем в начале: чтобы получить
доступ к своей базе данных, вам необходимо внести определенные IP-адреса в белый список.
Поскольку я работаю удаленно во многих разных местах, мой IP-адрес постоянно менялся, и
моя база данных не могла подключиться. Мне потребовалось слишком много времени, чтобы
понять, что проблема была в сетевых разрешениях! Если вы знаете, что ваш IP-адрес всегда
будет таким же, просто внесите свой IP-адрес в белый список. Если вы перемещаетесь, как я,
вы можете использовать IP-адрес 0.0.0.0/0, чтобы разрешить доступ с любого IP-адреса.
Поскольку это менее безопасно, имеет смысл сохранить его как временный белый список, как
на изображении ниже:
Получить URI Наконец, вернитесь на страницу «Кластеры» и под названием своего кластера
нажмите «Connect». В списке вариантов выберите «Connect Your Application», и вы получите
следующий URI подключения:
Это строка потребуется для подключения к базе данных, она пригодится нам позже.
Часть 2: Подключение к базе данных с помощью
Node.js и Mongoose
Убедитесь, что у вас установлен Node, затем откройте свой терминал, перейдите в новый
каталог по вашему выбору и введите
npm init
Вы можете принять все значения по умолчанию и просто нажимать Enter. У вас создастся
файл package.json
Далее нам необходимо установить Mongoose и Express сервер
yarn add express mongoose
Создайте файл с именем server.js в корневом каталоге. Теперь мы импортируем наши новые
модули вверху:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
немного ниже выполним подключение к нашей базе данных. Помните ту ссылку выше?
Которую нужно было запомнить?
mongoose.connect('mongodb+srv://admin:<password>@cluster0.7yrpe.mongodb.net/myFirstDatab
ase?retryWrites=true&w=majority')
.then(() => console.log("Db is connected"))
.catch(() => console.log("Db is not connected"))
В целом ваш файл server.js теперь должен выглядеть так:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
mongoose.connect('mongodb+srv://admin:<password>@cluster0.7yrpe.mongodb.net/myFirstDatab
ase?retryWrites=true&w=majority')
.then(() => console.log("Db is connected"))
.catch(() => console.log("Db is not connected"))
Нам остается только добавить запуск сервера в наш файл server.js
const port = 8000 app.listen(port, () => console.log( Server started on port:
http://localhost:${port} ));
И теперь наш server.js выглядит так:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
mongoose.connect('mongodb+srv://admin:<password>@cluster0.7yrpe.mongodb.net/myFirstDatab
ase?retryWrites=true&w=majority')
.then(() => console.log("Db is connected"))
.catch(() => console.log("Db is not connected"))
const port = 8000
app.listen(port, () => console.log(`Server started on port: http://localhost:${port}`));
Теперь мы будем использовать сервер постоянно, поэтому давайте установим nodemon
глобально, чтобы сервер автоматически обновлялся при каждом сохранении
yarn add nodemon -g
Для запуска проекта вводим в терминал команду
nodemon server
и если вы все сделали правильно, то вы увидите в консоли сообщение, что подключение к
базе данных произошло успешно
Часть 3:
Создание моделей для наших данных с помощью Mongoose
Одним из преимуществ MongoDB является отсутствие схемы: нет необходимости настраивать
таблицы заранее, поэтому вы можете отправлять данные, не беспокоясь о правильном
заполнении каждого поля.
Но что, если вы хотите определять объекты с помощью строго типизированной схемы? Вот
где приходит на помощь Mongoose. Mongoose популярен, потому что он обеспечивает
простой способ структурирования MongoDB и множество связанных с этим преимуществ. В
этом уроке мы создадим «животную» модель для веб-сайта по охране животных.
Рекомендуется хранить наши модели в отдельном каталоге models. Итак, создайте каталог
моделей и в нем файл с именем animal.js. Для простоты наша AnimalSchema будет принимать
только три параметра: name, которое принимает строку; isEndangered, который принимает
логическое значение, и dateOfEntry:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const AnimalSchema = new Schema({
name: {
type: String,
required: true
},
isEndangered: {
type: Boolean,
default: true
},
dateOfEntry: {
type: Date,
default: Date.now()
}
});
module.exports = Item = mongoose.model('animal', AnimalSchema);
Теперь я продемонстрирую, как использовать Mongoose для простого
выполнения четырех наиболее важных операций с базой данных: создания,
чтения, обновления и удаления.
Создавать
Вернувшись в server.js, мы можем импортировать нашу модель, создать новое животное и
добавить его в нашу базу данных с помощью метода сохранения. Например, мы могли бы
добавить следующее в конец server.js, чтобы сохранить новую запись для красной панды:
const Animal = require('./models/Animal');
const newAnimal = new Animal({
name: 'Red Panda',
isEndangered: true
})
newAnimal
.save()
.then(item => console.log(item))
.catch(err => console.log(err))
Наш сервер автоматически перезапустится, мы должны увидеть объект JSON,
представляющий наш новый элемент в консоли. Чтобы узнать, удалось ли это сделать, снова
войдите в MongoDB Atlas, перейдите в свой кластер и нажмите «Коллекции»: вы должны
увидеть коллекцию «животные» и внутри нее наши новые документы.
Попробуйте добавить еще несколько собственных элементов, чтобы у нас было несколько
документов в нашей базе данных.
Читать
Чтобы дважды проверить, правильно ли мы добавили наш элемент, давайте закомментируем
код, использованный для сохранения нового документа. Теперь давайте прочитаем каждый
документ в нашей базе данных с помощью нашей модели Animal: Mongoose упрощает это с
помощью метода поиска:
Animal.find()
.sort({ date: -1 })
.then(items => console.log(items))
find возвращает обещание, которое затем можно упорядочить с помощью метода сортировки.
Здесь -1 используется для упорядочивания элементов по времени их создания, причем самые
свежие находятся вверху.
Обратите внимание, что каждому элементу автоматически присвоено свойство _id. Затем мы
узнаем, как обновить элемент, поэтому скопируйте _id из вашей записи Red Panda.
Обновить
Если мы услышим хорошие новости о том, что красные панды больше не находятся под
угрозой исчезновения, нам нужно будет обновить нашу базу данных с помощью метода
findOneAndUpdate.
Это требует двух аргументов. Первый содержит наш запрос - информацию, используемую для
поиска нашей записи. Второй содержит обновление - любые поля, которые мы хотим
изменить. Чтобы пометить нашу красную панду как не находящуюся под угрозой
исчезновения, обязательно укажите свой идентификатор _id в коде ниже:
Animal
.findOneAndUpdate(
{ _id: '5d14cd34e8dbe65a6417915b' },
{ new: true }
)
.then(item => console.log(item))
Удалить
Нам нужно только немного изменить наш код, чтобы полностью удалить запись:
Animal
.findOneAndDelete(
{ _id: '5d14cd34e8dbe65a6417915b' },
{ new: true }
)
.then(console.log('Item deleted'))
Теперь вы знаете самые важные методы для Mongoose и MongoDB!
Download