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

Введение на новичок в Mongodb с Node.js

MongoDB – это кроссплатформенная, ориентированная на документацию системы управления базами данных (СУБД). Будучи Json-подобной базе данных NoSQL, он очень хорошо работает с JavaScript.

Автор оригинала: Janith Kasun.

Вступление

В этой статье мы собираемся поговорить о том, как использовать Монгодб База данных с Node.js. Есть пара способов сделать это, включая популярный подход – использование Библиотека объекта моделирования Отказ Мангуст Это пример такой библиотеки в Node.js, однако, мы будем использовать официальный драйвер MongoDB для Node.js.

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

Это будет сделано через несколько скриптов, хотя вы обычно интегрируете их с веб-сервером/приложением, а не на их автономных сценариях.

Что такое монгодб?

MongoDB – это кроссплатформа (работает на нескольких операционных системах), ориентирован на документацию Система управления базами данных (СУБД). Mongodb также является базой данных NoSQL, что означает, что она не использует SQL для выполнения операций в базе данных.

Mongodb использует документы, которые находятся в формате JSON – как BSON Это двоичное кодирование JSON.

Это разработано как проект с открытым исходным кодом Mongodb Inc. под Серверная сторона общественной лицензии Отказ

Узел и MongoDB очень хорошо работают вместе, частично, потому что Mongo использует JavaScript Engine, встроенный в базу данных, поскольку JavaScript хорош в обращении с объектами JSON.

По сравнению с другими базами данных, такими как MySQL, Mongodb быстро для хранения определенных типов данных и может автоматически масштабироваться. Это очень просто для реализации и бегать.

С Mongo является база данных NoSQL, у него есть свой способ хранения данных. Вот некоторые из конструкций, которые составляют структуру базы данных:

  1. База данных : Контейнер, который удерживает набор коллекций.
  2. Коллекция : Набор документов. Это похоже на таблицу в базе данных SQL. Однако, в отличие от базы данных SQL, сбор не имеет установленного структуры или предварительно настроенных типов данных.
  3. Документы : Json-подобный объект. Это похоже на ряд в базе данных SQL. Объект JSON также может содержать дочерние объекты, массив и т. Д.
  4. _id : Обязательное уникальное поле в каждом документе. Он отделяет один документ из другого, поэтому мы можем определить каждый документ независимо. Если это значение не предусмотрено, Mongodb автоматически назначает случайное значение для поля.

Конфигурация проекта

Давайте начнем с проекта и пропустить NPM Подсказки:

$ npm init -y

Затем давайте установим официальный драйвер MongoDB:

$ npm install --save mongodb

Для того, чтобы фактически подключиться к бамбусе, вам необходимо убедиться, что ваш MongoDB работает на заднем плане или на вашей машине разработки. Запустите команду Монго В вашей командной строке ввести оболочку Mongo:

Mongodb Shell.

Запуск команды Показать DBS; представит список текущих баз данных:

Показать Монгодб

Вы можете выйти из оболочки, запустив Выход команда.

В отличие от баз данных SQL, которые требуют создания базы данных перед использованием – нет необходимости создавать базу данных или сбора заранее. Они будут автоматически создаваться при необходимости.

Реализация трудных операций

С нашим проектом инициализированным и Mongodb установлены, мы можем спустить, чтобы написать какую-то логику Crud.

Подключение к базе данных

Конечно, использовать MongoDB в коде, нам нужно импортировать модуль:

const mongodb = require('mongodb');

Затем давайте создать клиента:

const MongoClient = mongodb.MongoClient;

Клиент должен знать, где подключиться, поэтому мы предоставим его с URL и dbname :

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'userdb';

Наконец, давайте попробуем подключиться к базе данных:

// Use the connect method to create a connection w/ the database
MongoClient.connect(url, (err, client) => {
    if (err) {
        throw err;
        return;
    }

    console.log('Database connection successful');

    // This objects holds the refrence to the db
    const db = client.db(dbName);

    client.close();
});

Если вы успешно подключили к базе данных, вы должны увидеть вывод:

Database connection successful

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

Как вы можете видеть в примере, Mongoclient.connect Метод принимает два параметра, URL-адрес базы данных и функция обратного вызова.

Функция обратного вызова имеет два параметра: Err и клиент Отказ

Первый параметр будет содержать ошибку, если есть какие-либо проблемы с сетью или любая другая проблема с подключением к базе данных. Если нет проблем, ошибка будет null Отказ

Второй параметр – это клиентский объект, который мы используем для взаимодействия с базой данных.

дБ Собственность клиент Удерживает ссылку на базу данных. Для выполнения любых действий в этой базе данных мы используем эту ссылку.

Создать документ

Для выполнения любых действий в базе данных вы должны быть подключены к нему, очевидно. С Mongo есть два способа вставки документов в базу данных. Первый способ – добавить Один Документ за раз. Мы можем использовать Вставить () Метод для достижения этого:

const collection = db.collection('userdb');

// Insert one document
collection.insertOne({
    firstName: 'john',
    lastName: 'doe',
    age: 21,
    hobbies: [
        'Reading books',
        'Collecting stamps'
    ]
}, (err, result) => {
    if (err) {
        console.log(err);
        return;
    }
    
    console.log(result.result);
});

Результат параметра обратного вызова содержит информацию о запросе. У него есть поле под названием Результат который выглядит как:

result: { n: 1, ok: 1 }

N это количество вставленных документов. Хорошо это статус он командования.

Вам не нужно Простраивает Создать базу данных с именем userdb или коллекция по имени Пользователи перед вставкой документа. База данных и сборник будут созданы автоматически.

Второй метод позволяет добавить несколько документы одновременно. Мы можем использовать insertmany () Метод для достижения этого:

// Insert multiple documents
collection.insertMany([
    {
        firstName: 'john',
        lastName: 'doe',
        age: 21,
        hobbies: [
            'Reading books',
            'Collecting stamps'
        ]
    }, {
        firstName: 'anna',
        lastName: 'dias',
        age: 20,
        hobbies: []
    }
], (err, result) => {
    if (err) {
        console.log(err);
        return;
    }
    
    console.log(result.ops);
});

Запуск этого куска кода даст:

[ { _id: 1,
    firstName: 'john',
    lastName: 'doe',
    age: 21,
    hobbies: [ 'Reading books', 'Collecting stamps' ] },
  { _id: 2,
    firstName: 'anna',
    lastName: 'dias',
    age: 20,
    hobbies: [] } ]

Так как мы не определены _id Для любой из этих документов мы можем получить назначенные _id от Результат ['OPS'] Объект, если нам когда-нибудь понадобится доступ к генерированному _id Отказ

В дополнение к этому, вы можете определить _id сам:

// Insert one document
collection.insertOne({
    _id: 'someuniqueid',    // Our specified ID
    firstName: 'john',
    lastName: 'doe',
    age: 21,
    hobbies: [
        'Reading books',
        'Collecting stamps'
    ]
}, (err, result) => {
    if (err) {
        console.log(err);
        return;
    }
    
    console.log(result.result);
});

Получение документов

Получить все документы

Во-первых, давайте посмотрим, как получить все документы из коллекции:

// Find all documents
collection.find({}).toArray((err, docs) => {
    if (err) {
        throw err;
    }
    console.log(docs)
});

Запуск этого куска кода даст нам:

[{ _id: 1,
    firstName: 'john',
    lastName: 'doe',
    age: 21,
    hobbies: [ 'Reading books', 'Collecting stamps' ] },
  { _id: 2,
    firstName: 'anna',
    lastName: 'dias',
    age: 20,
    hobbies: [] } ]

Как вы можете видеть в примере, мы пропустили пустой объект ( {} ) в качестве запроса.

Согласно документации, Toarriay () Метод возвращает массив, который содержит все документы из курсора. Способ полностью вытесняет курсор, загрузка всех документов в ОЗУ и исчерпывает курсор.

Документы, выявленные коллекцией, будут назначены на Документы Параметр в функции обратного вызова.

Найти документы с фильтром запроса

Следующим методом нахождения документа является использование фильтра запроса. Например, следующий запрос выбирает пользователей с именем Джон :

{
    'firstName': 'john'
}

И сделать это в коде:

collection.find({
    firstName: 'john'
}).toArray((err, docs) => {
    if (err) {
        throw err;
    }
    console.log(docs)
});

Этот код приведет к:

[{ _id: 1,
    firstName: 'john',
    lastName: 'doe',
    age: 21,
    hobbies: [ 'Reading books', 'Collecting stamps' ] } ]

Очевидно, все записи с Имя Джон возвращаются.

Обновление документа

Следующая операция мы собираемся говорить о том, это обновление документа. Чтобы обновить один документ, аналогичный для извлечения документа, мы можем использовать UpdateOne () Метод:

collection.updateOne(
    // The query filter
    {
        firstName: 'john'
    },
    // The update values
    {
        $set: {
            lastName: 'well',
            edited: true
        }
    },
    (err, result) => {
        if (err) {
            throw err;
        }
        console.log(result.result);
    }
);

Этот код приводит к себе:

{ n: 1, nModified: 1, ok: 1 }

Как вы можете видеть в примере, UpdateOne () Метод принимает три параметра. Первый – это фильтр запросов. Второй – это значения обновления. Третий – это функция обратного вызова, которая принимает ошибку и результаты в качестве параметров.

Опять же, результаты здесь уведомит нас о состоянии ( ok ), количество документов, выбранных для обновления ( n ) и количества обновленных документов ( nmodificed ).

N может быть больше, чем nmodificed , если поле обновляется со значением, которое оно уже имело.

Используя этот запрос, мы выбрали один документ, где поле Имя это Джон И мы изменили фамилия этого документа к хорошо Отказ Кроме того, мы добавили поле под названием Отредактировано и установить его как правда Отказ Обратите внимание, как нам не нужно указывать или следовать любой схеме во время всего процесса. Mongo просто принимает любые данные, которые вы отправляете.

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

Примечание : Если вы используете UpdateOne () Метод, в идеале запрос должен выбрать только один документ. В противном случае мы не можем предсказать документ, который может быть ударен. Так что держите это в виду и будьте осторожны при использовании фильтра запроса, который может сопоставить несколько документов.

Мы также можем редактировать все документы, которые удовлетворяют условию, которое поле Имя это Джон :

collection.updateMany(
    // The query filter
    {
        firstName: 'john'
    },
    // The update values
    {
        $set: {
            lastName: 'well',
            edited: true
        }
    },
    (err, result) => {
        if (err) {
            throw err;
        }
        console.log(result.result);
    }
);

UpdateMany () Метод похож на UpdateOne () Метод, кроме его обновлений Все Документы, которые соответствуют фильтру запроса.

Удаление документа

Мы можем использовать deleteone () или Делитеманы () Методы для удаления документа из коллекции:

collection.deleteOne(
    // The query filter
    {
        firstName: 'john'
    },
    (err, result) => {
        if (err) {
            throw err;
        }
        console.log(result.result);
    }
);

Этот код приводит к себе:

{ n: 1, ok: 1 }

Опять же, в аналогичной форме к предыдущим примерам – первый принятый параметр – это запрос фильтра, а вторые параметры являются функцией обратного вызова. Функция обратного вызова возвращает ошибку или результат.

Запуск этого куска кода удалит документ, который соответствует запросу – в этом случае документ, в котором Имя поле Джон Отказ Опять же, это только удалит Первый Документ, который соответствует запросу.

Вы также можете использовать Делетаманы Способ удаления всех документов, которые выбраны:

collection.deleteMany(
    // The query filter
    {
        firstName: 'john'
    },
    (err, result) => {
        if (err) {
            throw err;
        }
        console.log(result.result);
    }
);

Заключение

MongoDB – популярный NoSQL, легкая база данных, которая действительно проста в реализации и использования с узлом. Мы написали очень простое приложение узла, которое взаимодействует с MongoDB для создания, извлечения и удаления коллекций.

Как всегда, исходный код доступен на Github Отказ