Рубрики
Без рубрики

Как использовать Mongodb + Mongoose с Node.js – лучшая практика для задней части DEV

Mongodb, несомненно, является одним из самых популярных вариантов базы данных NoSQL сегодня. И у него отличное сообщество и экосистема. В этой статье мы рассмотрим некоторые из лучших практик, когда вы устанавливаете MongoDB и Mongoose с Node.js. Предпосылки для этой статьи Эта статья является одной из

Автор оригинала: Mehul Mohan.

Mongodb, несомненно, является одним из самых популярных вариантов базы данных NoSQL сегодня. И у него отличное сообщество и экосистема.

В этой статье мы рассмотрим некоторые из лучших практик, когда вы устанавливаете MongoDB и Mongoose с Node.js.

До Реквизиты для этой статьи

Эта статья является одной из части CodeDamn Пункт обучения Backend , где мы начинаем с базовых оснований и покройте их детали. Поэтому я предполагаю, что у вас уже есть опыт работы с JavaScript (и Node.js).

В настоящее время мы здесь:

Если у вас очень мало опыта работы с Node.js/JavaScript или на заднем конце в целом, Это, вероятно, хорошее место для начала Отказ Вы также можете найти Бесплатный курс по Mongoose + Mongodb + Node.js здесь Отказ Давайте погрузиться в.

Почему вам нужен мангуст?

Чтобы понять, почему нам нужен мангуст, давайте понять, как Mongodb (и база данных) работает на уровне архитектуры.

  • У вас есть сервер базы данных (например, сервер сообщества MongoDB, например)
  • У вас есть сценарий Node.js (как процесс)

Сервер MongoDB прослушивает в сокете TCP (обычно), и ваш процесс Node.js может подключаться к нему с помощью TCP-соединения.

Но в верхней части TCP Mongodb также имеет свой собственный протокол для понимания того, что именно клиент (наш процесс Node.js) хочет сделать базу данных.

Для этого сообщения, вместо того, чтобы изучить сообщения, которые мы должны отправлять на слой TCP, мы абстрактны, что подальше от программного обеспечения «драйвера», называемого драйвером MongoDB в этом случае. Драйвер MongoDB доступен как NPM пакет здесь Отказ

Теперь помните, что драйвер MongoDB отвечает за подключение и распределение запроса/ответов связи с низким уровнем уровней, но это только позволяет вам так далеко, как разработчик.

Поскольку MongoDB – это база данных схемы, она дает вам больше энергии, чем вам нужно в качестве новичка. Больше мощности означает больше площади поверхности, чтобы сделать вещи неверными. Вам необходимо уменьшить вашу площадь поверхности ошибок и диверсинов, которые вы можете сделать в вашем коде. Вам нужно что-то большее.

Встретить мангуста. Mongoose – это абстракция над нативным драйвером MongoDB (пакет NPM, который я упомянул выше).

Общее правило с абстракциями (как я понимаю) заключается в том, что с каждой абстракцией вы теряете некоторую низкоуровневую рабочую силу. Но это не обязательно означает, что это плохо. Иногда он повышает производительность 1000x +, потому что вам никогда не нужно иметь полный доступ к базовому API в любом случае.

Хороший способ подумать о том, что вы технически создаете приложение для чата в реальном времени как в C, а в Python.

Пример Python будет намного проще и быстрее для вас в качестве разработчика для реализации с более высокой производительностью.

C . может Будьте более эффективными, но он придет с огромной стоимостью по производительности/скорости развития/ошибкам/авариях. Кроме того, по большей части вам не нужно, чтобы мощность C дает вам возможность внедрить WebSockets.

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

Как подключить Mongoose + MongoDB

Во-первых, давайте быстро посмотрим, как вы должны подключиться к вашей базе данных MongoDB в 2020 году с Mongoose:

mongoose.connect(DB_CONNECTION_STRING, {
	useNewUrlParser: true,
	useUnifiedTopology: true,
	useCreateIndex: true,
	useFindAndModify: false
})

Этот формат соединения гарантирует, что вы используете новый анализатор URL из Mongoose, и что вы не используете какие-либо устаревшие практики. Вы можете прочитать глубину обо всех этих амортизационных сообщениях здесь если хочешь.

Как выполнить операции в мангусты

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

Mongoose дает вам варианты для двух вещей:

  1. Запрос на основе курсора
  2. Полный выбор запроса

Запрос на основе курсора

Запрос на основе курсора означает, что вы работаете с одной записью одновременно, пока вы извлекаете один или пакет документов одновременно из базы данных. Это эффективный способ работы с огромным количеством данных в ограниченной среде памяти.

Представьте, что вам приходится разбирать документы 10 ГБ в общем размере на облачном сервере 1 ГБ/1CORE. Вы не можете получить всю коллекцию, потому что это не подходит для вашей системы. Курсор – это хороший (и единственный?) Вариант здесь.

Полная выборка запроса

Это тип запроса, в котором вы получаете полный ответ вашего запроса одновременно. По большей части это то, что вы будете использовать. Поэтому мы будем сосредоточиться в основном на этот метод здесь.

Как использовать модели мангусты

Модели – сверхдержавы мангусты. Они помогают вам принуждать правила «схема» и предоставлять беспроблемную интеграцию вашего узла в вызовы баз данных.

Самый первый шаг – определить хорошую модель:

import mongoose from 'mongoose'

const CompletedSchema = new mongoose.Schema(
	{
		type: { type: String, enum: ['course', 'classroom'], required: true },
		parentslug: { type: String, required: true },
		slug: { type: String, required: true },
		userid: { type: String, required: true }
	},
	{ collection: 'completed' }
)

CompletedSchema.index({ slug: 1, userid: 1 }, { unique: true })

const model = mongoose.model('Completed', CompletedSchema)
export default model

Это один обрезанный пример непосредственно из кодовой базы Codedamn. Несколько интересных вещей, которые вы должны отметить здесь:

  1. Попробуйте сохранить Требуется: правда на всех полях, которые требуются. Это может быть огромной больной боли для вас, если вы не используете систему проверки статического типа, как TeampScript, чтобы помочь вам с правильными именами свойств при создании объекта. Плюс бесплатная проверка слишком крутая.
  2. Определите индексы и уникальные поля. Уникальный Свойство также может быть добавлено в схему. Индексы – это широкая тема, поэтому я не буду идти в глубину здесь. Но в большом масштабе они действительно могут помочь вам много ускорить ваши вопросы.
  3. Определите название коллекции явно. Хотя Mongoose может автоматически дать название коллекции на основе имени модели ( Завершено здесь, например), это слишком много абстракции на мой взгляд. Вы должны хотя бы знать о именах и коллекциях баз данных в вашей кодовой базе.
  4. Ограничить значения, если вы можете, используя enums.

Как выполнить операции CRUD

Круд означает C . Reate, R EAD, U PDATE и Подразделение Элете. Это четыре фундаментальных варианта, с помощью которых вы можете выполнять любые манипулирования данными в базе данных. Давайте быстро увидим некоторые примеры этих операций.

Операция создания

Это просто означает создание новой записи в базе данных. Давайте использовать модель, которую мы определены выше, чтобы создать запись:

try {
    const res = await CompletedSchema.create(record)
} catch(error) {
	console.error(error)
    // handle the error
}

Опять таки, Несколько указателей здесь:

  1. Используйте Async-a ждать вместо обратных вызовов (приятно на глазах, никаких нарушений наземных результатов, как таковой)
  2. Используйте Try-Catch Blocks вокруг запросов, потому что ваш запрос может потерпеть неудачу по ряду причин (дубликата записи, неправильное значение и т. Д.)

Операция чтения

Это означает чтение существующих значений из базы данных. Просто так же, как это звучит, но есть пара Gogchas, вы должны знать с мангустом:

const res = await CompletedSchema.find(info).lean()
  1. Можете ли вы увидеть Lean () Функция звонить там? Это супер полезно для производительности. По умолчанию Mongoose обрабатывает возвращенный документ (ы) из базы данных и добавляет его волшебный Методы на нем (например, .save Несомненно
  2. Когда вы используете .lean () Мангуст возвращает простовые объекты JSON вместо памяти и ресурсов тяжелых документов. Делает запросы быстрее и менее дорогими на вашем процессоре.
  3. Тем не менее, вы можете опустить .наклонять () Если вы на самом деле думаете о обновлении данных (мы увидим, что следующее)

Операция обновления

Если у вас уже есть документ Mongoose с вами (не стреляя с .lean () ), вы можете просто перейти вперед и изменять свойство объекта и сохранить его, используя объект .save () :

const doc = await CompletedSchema.findOne(info)
doc.slug = 'something-else'
await doc.save()

Помните, что здесь сделаны две звонки в базе данных. Первый на indone. а второй на doc.save Отказ

Если вы можете, вы всегда должны уменьшить количество запросов, попадающих в базу данных (потому что если вы сравниваете память, сеть и диск, сеть почти всегда самая медленная).

В другом случае вы можете использовать такое запрос:

const res = await CompletedSchema.updateOne(, ).lean()

И это сделает только один звонок в базу данных.

Удалить операцию

Удалить также просто с мангустом. Давайте посмотрим, как вы можете удалить один документ:

const res = await CompletedSchema.deleteOne()

Так же, как UpdateOne , DELETEONE Также принимает первый аргумент в качестве согласования условия для документа.

Есть также другой метод под названием Делетаманы Что следует использовать только тогда, когда вы знаете, вы хотите удалить несколько документов.

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

Заключение

Эта статья была простым введением в мир Mongoose и MongoDB для разработчиков Node.js.

Если вам понравилось эту статью, вы можете еще раз активировать свою игру, как разработчик, следуя за Codedamn Backend Eзнание Путь Отказ Пожалуйста, не стесняйтесь добраться до меня на Twitter Для любой обратной связи!

Оригинал: “https://www.freecodecamp.org/news/mongodb-mongoose-node-tutorial/”