Изучаем MongoDB: Основы CRUD
Перевод статьи: Paras — Learn 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 🙂