MongoDB — это документная база данных NoSQL, в которой вы можете хранить свои данные в виде документа, похожего на JSON.

Используя Node.js и MongoDB, вы можете создать мощный бэкенд. Для этого вы знаете, как работает операция CRUD в MongoDB и Node.js.

Предпосылки:

  • У вас есть базовые знания JavaScript.
  • Установите node.js на свой компьютер
  • Иметь учетную запись на MongoDB

Настройка проекта

Сначала вам нужно инициализировать проект и установить API драйвера MongoDB в ваше приложение. Поэтому запустите команду ниже в свой каталог, где вы можете инициализировать свой проект.

npm init
npm install mongodb

Соединение с MongoDB

Теперь давайте начнем с подключения базы данных MongoDB к вашему приложению Node.js. Для этого создайте файл index.js в своем приложении и используйте этот код для подключения.

import { MongoClient } from "mongodb";

//Replace your connection string
const uri = "<connection string uri>"

const client = new MongoClient(uri);

const operations = async () => {
  try {

    //database
    const db = client.db('my_db');

    //collection or as we know as table
    const user = db.collection('users');

    //You are to ready to perform CRUD operation here
    //insertOneUser();
    //insertManyUser();
    //findOneUser();
    //findManyUser();
    //updateOneUser();
    //updateManyUser();
    //deleteOneUser();
    //deleteManyUser();

  } finally {
    client.close();
  }
}

operations().catch(error => console.log(error));

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

Вставить операцию

Теперь давайте сначала создадим пользователя, используя методы insertOne() и insertMany() в нашей коллекции users. Таким образом, вы можете создать функцию и вызвать ее в нашей функции операций.

//Inserting one user at a time
const insertOneUser = async (users) => {
    try {
        const query = { 
                        name: 'Fake user 1',
                        email: '[email protected]',
                        password:'$dfferiuy37653298734jhrfkudshsdf'
                      }

        const user = await users.insertOne(query);
        
        //Console our newly created user
        console.log(user);

    } catch (error) {
      console.log(error);
    }
}

//Insert many user at a time
const insertManyUser = async (users) => {
    try {
        const query = [
            { 
              name: 'John Deo 1',
              email: '[email protected]',
              password:'$dfferiuy37653298734jhrfkudshsdf'
            },
            { 
              name: 'John Deo 2',
              email: '[email protected]',
              password:'$dfferiuy37653298734jhrfkudshsdf'
            },
            { 
              name: 'John Deo 3',
              email: '[email protected]',
              password:'$dfferiuy37653298734jhrfkudshsdf'
            }
        ];

        //ordered simply continue insert document if one is fail to insert
        const options = { ordered: true}

        const result = await users.insertMany(query, options);
        
        //
        console.log(result);

    } catch (error) {
      console.log(error);
    }
}

Здесь функция insertOne() вставляет только один документ за раз, а функция insertMany() вставляет сразу несколько документов. После вставки вашего документа вы можете увидеть свой документ в своей базе данных MongoDB, а вывод в консоли выглядит так, как показано ниже.

//For insertOne() method
{
  acknowledged: true,
  insertedId: new ObjectId("6415b7861b4130f29a70f42a")
}

//For insertMany Method
{
  acknowledged: true,
  insertedCount: 3,
  insertedIds: {
    '0': new ObjectId("6415b81d6318d11966aae6f6"),
    '1': new ObjectId("6415b81d6318d11966aae6f7"),
    '2': new ObjectId("6415b81d6318d11966aae6f8")
  }
}

Поздравляем! Вы завершили операцию создания! .

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

Теперь давайте прочитаем этот документ, который мы только что создали. Для этого мы можем использовать методы find() и findOne().

Из его названия можно догадаться, что он находит много документов в случае метода find() и один документ в случае findOne( ) из коллекции документов, соответствующих запросу.

//find one user from collection
const findOneUser = async (users) => {

  try {
    //find by user email
    const query = { email: '[email protected]'};
            
    const user = await users.findOne(query);
       
    console.log(user);

  } catch (error) {
    console.log(error);
  }
}

//find all user
const findManyUser = async (users) => {

  try {
    //find all user which contain a string 'john_deo_' in it's email
    const query = { email: { $regex: new RegExp('john_deo_') } };

    const result = await users.find(query);

     await result.forEach(user => {
       console.log(user);
     });

    } finally {
        client.close();
    }
}

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

//findOne() method output
{
  _id: new ObjectId("6415b7861b4130f29a70f42a"),
  name: 'Fake user 1',
  email: '[email protected]',
  password: '$dfferiuy37653298734jhrfkudshsdf'
}

//find() method output
{
  _id: new ObjectId("6415b81d6318d11966aae6f6"),
  name: 'John Deo 1',
  email: '[email protected]',
  password: '$dfferiuy37653298734jhrfkudshsdf'
}
{
  _id: new ObjectId("6415b81d6318d11966aae6f7"),
  name: 'John Deo 2',
  email: '[email protected]',
  password: '$dfferiuy37653298734jhrfkudshsdf'
}
{
  _id: new ObjectId("6415b81d6318d11966aae6f8"),
  name: 'John Deo 3',
  email: '[email protected]',
  password: '$dfferiuy37653298734jhrfkudshsdf'
}

Поздравляем, вы также завершили операцию чтения! .

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

Теперь давайте обсудим операцию обновления. Здесь также есть два метода updateOne() и updateMany(). Итак, я знаю, что вы настолько умны, что правильно догадываетесь, как это работает. Метод updateOne() обновляет только один документ, тогда как метод updateMany() обновляет множество документов, соответствующих запросу.

//Update one user
const updateOneUser = async (users) => {
  try {
    const query = { email: '[email protected]' };
    //this will create new document if not document match with query
    const options = { upsert: true }
        
    const updateDoc = {
            $set: {
              name: 'Fake User Update'
            }
          }
        
    const doc = await users.updateOne(query, updateDoc, options);

    console.log(doc);
    } catch (error) {
        console.log(error);
    }
}

//Update Many User
const updateManyUser = async () => {
  try {
    const query = { email: { $regex: new RegExp('john_deo_') } };
    const updateDoc = {
            $set: {
              name: 'John_Deo_Update'
            }
          }
        
    const doc = await users.updateMany(query, updateDoc);
    console.log(doc);

    } catch (error) {
        console.log(error);
    }
}

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

//Update one User
{
  acknowledged: true,
  modifiedCount: 1,
  upsertedId: null,
  upsertedCount: 0,
  matchedCount: 1
}

//Update Many User
{
  acknowledged: true,
  modifiedCount: 3,
  upsertedId: null,
  upsertedCount: 0,
  matchedCount: 3
}

Поздравляем, вы также завершили операцию обновления! .

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

Теперь, наконец, давайте обсудим операцию удаления. Для удаления документа используйте метод delete() и метод deleteMany().

//Delete one User
const deleteOneUser = async (users) => {
  try { 
    const query = { email: '[email protected]' };

    const result = await users.deleteOne(query);
    console.log(result);

  } catch(error) {
    console.log(error);
  }
}

//Delete Many User
const deleteManyUser = async (users) => {
  try {
    const query = { email: { $regex: new RegExp('john_deo_') } };
    
    const result = await users.deleteMany(query);
    console.log(result);
  
  } catch (error) {
    console.log(error);
  }
}

Как вы знаете, он соответствует запросу и удаляет документ, который соответствует нашему запросу. Если вы используете метод deleteMany(), используйте его с осторожностью, потому что если мы укажем { } в качестве запроса, он удалит весь документ из коллекции.

//Delete one user
{ acknowledged: true, deletedCount: 1 }

//Delete many user
{ acknowledged: true, deletedCount: 3 }

Еще раз поздравляем, вы прошли все четыре операции Create, Read, Update и Delete.

Заключение

Если вы знаете основы работы с MongoDB и Node.js, вы можете приступить к созданию некоторого API. Я надеюсь, что эта статья поможет вам понять, как работают операции CRUD в Node.js.

Ресурсы