MongoDB

Mis on MongoDB?

MongoDB — это база данных, где можно хранить информацию, как в тетрадке или таблице, но в более гибкой и умной форме.
Например, если ты хочешь хранить данные о людях, книгах или продуктах — MongoDB подойдёт отлично.


Mis on kollektsioon (kogu)?

Коллекция (по-английски collection) — это как папка или раздел, где лежат одинаковые типы данных.
Например:

  • users — коллекция пользователей;
  • products — коллекция товаров.

Коллекция = как таблица в Excel, но без строгих правил.


Mis on dokument?

Документ — это одна запись внутри коллекции.
Например, в коллекции users один документ может выглядеть так:

{
fullname: "Anna",
age: 30
}

Каждый документ — это как одна строка в таблице, но можно добавлять любые поля (даже списки, адреса, посты и т.д.).

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

use mongo

Переключает тебя на базу данных с именем mongo. Если такой нет — создастся при первом сохранении данных.

Просмотр всех пользователей

db.users.find()

Показывает все документы (записи) в коллекции users (пользователи).

Добавление одного пользователя

db.users.insert({
name: "admin",
age: 25,
})

Добавляет одного пользователя с именем admin и возрастом 25.
insert() — устарел, лучше использовать insertOne().


Добавление сразу нескольких пользователей

db.users.insertMany([
{name: "vasya", age: 25},
{name: "evgeniy", age: 26},
{name: "nikita", age: 28},
{name: "gleb", age: 29},
{name: "Jaan", age: 20}
])

Добавляет сразу несколько записей (пользователей).


Фильтрация по возрасту

db.users.find({age: 25})

Показывает всех, у кого возраст точно 25.


Фильтр: имя ИЛИ возраст

db.users.find({$or: [{name: "admin"}, {age: 20}]}

Показывает всех, у кого имя admin ИЛИ возраст 20.


Меньше чем

db.users.find({age: {$lt: 22}})

Показывает всех, кто младше 22 лет. $lt = less than.


Больше или равно

db.users.find({age: {$gte: 20}})

Показывает всех, кому 20 и больше. $gte = greater than or equal.


Больше

db.users.find({age: {$gt: 20}})

Показывает всех, кто старше 20. $gt = greater than.


Сортировка по убыванию

db.users.find().sort({age: -1})


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

Сортировка по возрастанию

db.users.find().sort({age: 1})

От младших к старшим. 1 — по возрастанию.


Ограничить количество

db.users.find().limit(2)

Показывает только первые 2 записи.


Поиск по ID

db.users.findOne({_id: ObjectId('...')})

Ищет одного пользователя по его уникальному идентификатору _id.


Обновление одного пользователя

db.users.update(
{name: "nikita"},
{$set: {name: "ilon mask", age: 45}}
)

Находит пользователя с именем nikita и меняет имя на ilon mask, возраст на 45.


Переименование поля во всех документах

db.users.updateMany(
{},
{$rename: {name: "fullname"}}
)

Переименовывает поле name в fullname у всех пользователей.


Удаление одной записи

db.users.deleteOne({age: 25})

Удаляет одного пользователя с возрастом 25.


Пакетная операция (bulkWrite)

db.users.bulkWrite([
{
insertOne: {
document: {fullname: "gleb", age: 29}
}
},
{
deleteOne: {
filter: {fullname: "vasya"}
}
}
])

Делает сразу две операции:

  • Добавляет одного пользователя gleb;
  • Удаляет пользователя vasya.

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

db.users.update(
{fullname: "gleb"},
{
$set: {
posts: [
{title:'javascript', text:'js top'},
{title:'mongo', text:'mongo database'}
]
}
}
)

Пользователю gleb добавляется массив posts (посты).


Найти только поле posts у одного

db.users.findOne({fullname: "gleb"}, {posts: 1})

Показывает только поле posts у пользователя gleb.


Найти, если в массиве posts есть запись с title: "javascript"

db.users.findOne({
posts: {
$elemMatch: {title: "javascript"}
}
})

Ищет пользователя, у которого в массиве постов есть элемент с title: "javascript".


Найти все, у кого есть поле posts

db.users.find({posts: {$exists:true}})

Показывает всех пользователей, у кого вообще есть поле posts.

Подключение базы данных MongoDB Cloud через Node.js

Создаем новый проект в WebStorm и выбираем Node.js

Открываем терминал и прописываем команды:

  • npm init -y – создаёт package.json файл с настройками по умолчанию для проекта Node.js, -y означает “yes to all”
  • npm i mongodb / npm install mongodb – устанавливает официальную библиотеку MongoDB для Node.js.

Открываем package.json и проверяем установился ли mongodb

Создаем аккаунт или заходим в MongoDB Cloud, далее заходим в Clusters и создаем новый кластер.

IP адрес вводим 0.0.0.0/0 и вводим username и password

Выбираем тип подключения –> Drivers

Копируем ссылку для подключения базы данных к Node.js

mongodb+srv://user123:@cluster0.dbvqdrq.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0

Создаем фаил indexjs.js и пишем данный код, в MongoClient всматвляем ссылку подключения из MongoDB Cloud и <db_password> меняем и вписываем свой созданный пароль.

База данных подключена, теперь мы можем создать коллекцию и добавить в неё пользователей.

const { MongoClient } = require('mongodb')

const client = new MongoClient('mongodb+srv://q1zeka1q:zeka2000@cluster0.wzxiqlh.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0')

const start = async () => {
    try{
        await client.connect()
        console.log("Connected")
        await client.db().createCollection('users')
        const users = client.db().collection('users')
        await users.insertOne({name: 'gleb', age:29 })
        const user = await users.findOne({name:'gleb'})
        console.log(user)
    }catch(e){
        console.log(e)
    }
}

start()

Проверяем через графическую оболочку в MongoDB Cloud