Обычно программисты, входящие в Unode.js Universe, впервые ассоциируйте его с помощью Монгодб И, как я публикую эту статью, я чувствую, что укрепляю эту тему еще больше.
Тем не менее, я не здесь, чтобы говорить о том, лучше ли базы данных NoSQL лучше, чем базы данных SQL или нет. Я думаю, что у каждого есть свои собственные случаи использования, и нам всегда нужно принять во внимание контекст.
Существует несколько вариантов подключения нашего API к базе данных MongoDB. Тем не менее, я могу безопасно сказать, что мангуст является самым популярным пакетом, и тот, который в большинстве случаев следует использовать. Однако в этой статье я расскажу о Монах Хотя они имеют разные подходы, они решают точно такую же проблему.
Оба разрабатываются одной и той же организацией, но сначала мы должны сначала понять, что такое NoSQL.
Что такое базы данных NoSQL?
Базы данных NoSQL не являются табличными и хранения данных по-разному от реляционных таблиц. В случае MongoDB база данных вместо таблиц имеет коллекции, а вместо того, чтобы иметь столбцы, у него есть JSON документы.
Каждый документ содержит пары полей и значений. Значения обычно могут быть различными типами, такими как строки, номера, логические значения, массивы или объекты, и их структуры обычно выравниваются с объектами, с которыми разработчики работают в коде.
Именно по этим причинам они отлично подходят для широкого спектра случаев использования и могут использоваться в качестве базы данных общего назначения.
Как структурирован документ?
В базе данных NoSQL записи обычно хранятся как документ JSON. Для каждой статьи название, описание, содержимое, имя автора и идентификатор автора хранятся в качестве атрибутов в одном документе. Таким образом, данные оптимизированы для более быстрой и интуитивно понятного развития.
Почему вы должны использовать базу данных NoSQL?
Базы данных NoSQL предназначены для различных стандартов доступа к данным, которые хотят время отклика в течение низкого задержки. Если вы хотите прозойти приложение как можно скорее или если вы не хотите иметь дело с отношениями между данными в структурированном виде, MongoDB может быть идеальным решением для вас. Я также бы добавил, что в отличие от баз данных SQL, как вы можете видеть, мы можем бесплатно смоделировать данные таким образом, который подходит нам наилучшим образом.
И базы данных MongoDB гибкие до точки поддержки изменений, не требуя радикального реинжиниринга модели данных и имеет архитектуру, которая легко масштабироваться.
Почему монах?
Я понимаю, что у Mongodb есть драйвер для Node.js. И многие люди против абстракций, поскольку водитель MongoDB уже более чем достаточно, чтобы выполнить любую работу. Однако я думаю, что монах легче разработать API. Гораздо проще настроить клиента и прочитать документацию. И эти очки важны для новых для разработки API в Node.js, или если вы просто хотите получить ваше приложение в Интернете как можно скорее.
Давайте код
Теперь, когда у нас есть некоторые представления о том, что являются базами данных NoSQL, MongoDB и документы. Мы собираемся создать простой Crud.
Сначала мы установим следующие зависимости для разработки API:
npm i express @hapi/boom monk
Затем мы создадим простой API, просто чтобы убедиться, что все работает правильно:
const express = require("express"); const app = express(); app.use(express.json()); app.get("/", (req, res) => { return res.json({ message: "Hello World 👋🇵🇹" }); }); const start = (port) => { try { app.listen(port, () => { console.log(`Api running at: http://localhost:${port}`); }); } catch (error) { console.error(error); process.exit(); } }; start(3333);
Далее мы импортируем монах, и мы определим URL-адрес подключения с нашим экземпляром MongoDB. URL структурирован следующим образом:
mongodb://[user]:[password]@[host]:[port]/[database]?authSource=admin
Таким образом, код должен быть следующим:
const express = require("express"); const monk = require("monk"); const app = express(); const db = monk("mongodb://root:root@localhost:27017/monk?authSource=admin"); // Hidden for simplicity
Теперь мы должны дать имя коллекции, которая будет сохранять все наши документы. В этом примере мы назовем коллекцию «посты». Так:
const express = require("express"); const monk = require("monk"); const app = express(); const db = monk("mongodb://root:root@localhost:27017/monk?authSource=admin"); const Posts = db.get("posts"); // Hidden for simplicity
Теперь мы собираемся работать над нашими маршрутами и нашими глаголами HTTP. В этом случае у нас еще нет никаких документов в коллекции наших постов. Итак, давайте начнем с создания нашей первой конечной точки с помощью метода вставки. Чтобы узнать больше о методе, читать Это Отказ
app.post("/posts", async (req, res) => { try { const data = await Posts.insert({ ...req.body }); return res.json(data); } catch (error) { throw boomify(error); } });
Так же, как код указывает, что документ будет вставлен в нашу коллекцию в соответствии с тем, что происходит от тела.
@ Hapi/boom Был установлен так, чтобы всякий раз, когда происходит ошибка при консультации по ресурсу (который в этом случае является нашей базой данных), оно форматирует ошибку, так что легче читать и идентифицировать.
Теперь мы создадим конечную точку для поиска нашей коллекции для всех ваших документов. Чтобы узнать больше о методе поиска, читать Это Отказ
app.get("/posts", async (req, res) => { try { const data = await Posts.find(); return res.json(data); } catch (error) { throw boomify(error); } });
Если мы хотим получить документ специально из нашей коллекции, вместо того, чтобы использовать SICE, мы используем Findone и укажите атрибут, с помощью которого мы хотим сделать поиск. В этом случае мы собираемся искать идентификатор документа. Чтобы узнать больше о методе Findone, прочитайте Это Отказ
app.get("/posts/:id", async (req, res) => { try { const { id } = req.params; const data = await Posts.findOne({ _id: id }); return res.json(data); } catch (error) { throw boomify(error); } });
Если мы хотим обновить атрибут определенного документа, идеал должен использовать метод FindoneAndupdate, таким образом, мы проверяем, существует ли документ, а затем обновляет его. А затем возвращает его. Чтобы узнать больше об этом методе, прочитайте Это Отказ
app.patch("/posts/:id", async (req, res) => { try { const { id } = req.params; const data = await Posts.findOneAndUpdate({ _id: id }, { $set: req.body }); return res.json(data); } catch (error) { throw boomify(error); } });
Последнее, но не менее важное, нам просто нужно удалить определенный документ, для этого мы будем использовать метод FindoneAnddelete. Как и предыдущий метод, он также проверяет сначала, если документ существует, а затем удаляет его. Как только это действие закончено, объект удаленного документа возвращается. Узнайте больше об этом методе здесь Отказ
app.delete("/posts/:id", async (req, res) => { try { const { id } = req.params; const data = await Posts.findOneAndDelete({ _id: id }); return res.json(data); } catch (error) { throw boomify(error); } });
Конечный результат должен выглядеть следующее:
const express = require("express"); const monk = require("monk"); const { boomify } = require("@hapi/boom"); const app = express(); const db = monk("mongodb://root:root@localhost:27017/monk?authSource=admin"); const Posts = db.get("posts"); app.use(express.json()); app.get("/", (req, res) => { return res.json({ message: "Hello World 👋🇵🇹" }); }); app.post("/posts", async (req, res) => { try { const data = await Posts.insert({ ...req.body }); return res.json(data); } catch (error) { throw boomify(error); } }); app.get("/posts", async (req, res) => { try { const data = await Posts.find(); return res.json(data); } catch (error) { throw boomify(error); } }); app.get("/posts/:id", async (req, res) => { try { const { id } = req.params; const data = await Posts.findOne({ _id: id }); return res.json(data); } catch (error) { throw boomify(error); } }); app.patch("/posts/:id", async (req, res) => { try { const { id } = req.params; const data = await Posts.findOneAndUpdate({ _id: id }, { $set: req.body }); return res.json(data); } catch (error) { throw boomify(error); } }); app.delete("/posts/:id", async (req, res) => { try { const { id } = req.params; const data = await Posts.findOneAndDelete({ _id: id }); return res.json(data); } catch (error) { throw boomify(error); } }); const start = (port) => { try { app.listen(port, () => { console.log(`Api running at: http://localhost:${port}`); }); } catch (error) { console.error(error); process.exit(); } }; start(3333);
Последние ноты
Идея этой статьи состояла в том, чтобы ввести монах и показать, что мы можем подключиться к базе данных MongoDB быстрым и простым способом. Я надеюсь, что я был понятен в объяснении вещей, и что вы нашли статью интересной.
А вы?
Вы уже используете Mongodb в ваших проектах?
Оригинал: “https://dev.to/franciscomendes10866/an-introduction-to-mongodb-and-node-js-using-monk-3492”