Базы данных

Изучаем MongoDB: Основы CRUD

Spread the love

Перевод статьи: ParasLearn MongoDB: CRUD Basics

Это продолжение моего предыдущего поста, где я объяснил, как установить и настроить mongodb, а также рассказал о некоторых основных командах. В этом посте я расскажу об основных операциях CRUD.

Содержание

  • Работаем с Базами данных (Database)
  • Работаем с коллекциями
  • CRUD операции

Работаем с Базами данных (Database)

Базы данных (Database) содержать все наши коллекции (так же как database в sql). В этом посте мы создадим database под названием pokeworld, и в ней будут коллекции pokemons, trainers и т. д.

Создание Database

> use pokeworld

Проверяем выбрана ли наша db

> db
#или
> db.getName()

Удаление db

> db.dropDatabase()

Вывести статистику по db

> db.stats()

Получить информацию о коллекциях в db

> db.getCollectionInfos()

Работаем с коллекциями

Коллекции хранят все документы вместе. Они похожи на таблицы в sql. Например в sql, у нас может быть таблица пользователей с такими полями, как имя, возраст, пол, род занятий и т. д., Соответственно в mongo мы можем иметь коллекцию пользователей, где документы (в стиле JSON) могут иметь эти же поля в парах ключ-значение.

Пример документа:

{
   name: "John",
   age: 20,
   gender: "male",
   occupation: "engineer"
}

CRUD-операции также выполняются над коллекциями. Итак, с этого момента большая часть нашей работы будет вращаться вокруг коллекций. Мы создадим несколько коллекций в нашей базе данных pokeworld и изучим некоторые полезные методы, связанные с ними.

Создание коллекции

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

> db.createCollection("pokemons")

Отобрать все коллекции в db

> show collections
# или
> db.getCollectionNames()

Удалить коллекцию

> db.pokemons.drop()

Переименовать коллекцию

> db.pokemons.renameCollection("pokemons-renamed")

Отобрать статистику по коллекции

> db.pokemons.stats()

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

> db.pokemons.count()

CRUD операции

Все операции, которые нам нужны для создания (creating), чтения (reading), обновления (updating) и удаления (deleting), доступны для коллекций. Давайте посмотрим на основные и наиболее часто используемые операции, которые вам нужны.

Создание

Есть два метода, которые нам нужны для создания документов в коллекции.

  • insertOne
  • insertMany

Почему бы не добавить данные в коллекцию pokemons в БД pokeworld.

# вставить одного покемона
> db.pokemons.insertOne({
    name: "Pikachu",
    type: "Electric",
    health: 35
})

# вставить более одного покемона одновременно
> db.pokemons.insertMany([
    { name: "Squirtle", type: "Water", health: 44 },
    { name: "Poliwag", type: "Water", health: 40 },
    { name: "Bulbasaur", type: "Grass", health: 45 },
    { name: "Pidgey", type: "Flying", health: 40 }
])

Чтение

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

  • find: возвращает несколько документов
  • findOne: возвращает только первый документ

В этих двух операциях мы можем передавать фильтры. Если не указан фильтр, он вернет все документы в случае find и первый документ в случае FineOne.

# найди один
> db.pokemons.findOne({ name: "Pikachu" })

# найти всех покемонов типа Water
> db.pokemons.find({ type: "Water" }) 

# найти покемонов со health больше 40
> db.pokemons.find({ health: { $gt: 40 } })

# найти покемонов с типом Water и health больше 40
> db.pokemons.find({ type: "Water", health: { $gt: 40 }})

В приведенном выше примере мы использовали оператор $gt. Есть и другие операторы, о которых мы поговорим в следующих статьях.

Обновление

Опять же, у нас есть два метода обновления документов

  • updateOne
  • updateMany

Оба могут использовать фильтр, как и find, чтобы найти документ, который нам нужно обновить, и объект, который определяет, что мы хотим обновить. Мы используем оператор $set для обновления полей в документе.

# обновление одного покемона
> db.pokemons.updateOne(
    { name: "Pikachu" },
    { $set: { health: 45 }}
)

# обновление нескольких покемонов и добавление weakness к type Water
> db.pokemons.updateMany(
    { type: "Water" },
    { $set: { weakness: "Electric" }}
)

# увеличение health пикачу на 10, а также добавление weakness
> db.pokemons.updateOne(
    { name: "Pikachu" },
    { 
       $inc: { health: 10 },
       $set: { weakness: "Ground" }
    }
)

В приведенных выше примерах вы можете видеть, что мы можем изменить несколько полей за одно обновление. $inc — это один из операторов, который вы видите здесь, который мы можем использовать для увеличения / уменьшения числовых типов. Есть и другие операторы, о которых мы поговорим позже.

Удаление

Наша последняя операция — Удалить.

  • deleteOne
  • deleteMany

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

# удаление одного покемона
> db.pokemons.deleteOne({ name: "Pikachu" })

# удаление покемонов с health больше или равным 40
> db.pokemons.deleteMany({ health: { $gte: 40 }})

# удаление всех покемонов !!
> db.pokemons.deleteMany({})

Печально 🙁 Мы удалили Пикачу. Не забудьте добавить его обратно.

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


Далее мы более подробно рассмотрим операции чтения. Больше способов фильтрации данных, доступных операторов и т. д.

Happy Coding 🙂

Была ли вам полезна эта статья?
[8 / 4.5]

Spread the love
Editorial Team

Recent Posts

Vue 3.4 Новая механика v-model компонента

Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование​ v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…

11 месяцев ago

Анонс Vue 3.4

Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…

11 месяцев ago

Как принудительно пере-отобразить (re-render) компонент Vue

Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…

2 года ago

Проблемы с установкой сертификата на nginix

Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…

2 года ago

Введение в JavaScript Temporal API

Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…

2 года ago

Когда и как выбирать между медиа запросами и контейнерными запросами

Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…

2 года ago