noSQL andmebaas

Что такое MongoDB?

MongoDB — это база данных, в которой данные хранятся не в виде таблиц (как в классических SQL-базах), а в виде документов в формате JSON (на самом деле BSON – двоичный JSON).

MongoDB — это NoSQL-база данных, то есть:

  • не использует таблицы и строки,
  • данные более гибкие по структуре,
  • отлично подходит для работы с вложенными данными (например, массивами, объектами).

Что такое коллекция (по-английски — collection)?

Коллекция — это как таблица в обычной базе данных.
В ней хранятся документы.
Каждая коллекция содержит похожие по смыслу документы, например:

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

Что такое документ?

Документ — это как строка в таблице, но в виде JSON-объекта.

Каждый документ может иметь свою структуру, не обязательно строго одинаковую, как в SQL.

Команды

show databases

Показывает все базы данных в MongoDB.

use mongo

Выбирает (или создаёт, если её ещё нет) базу данных mongo.

db.createCollection("users")

Создаёт коллекцию users вручную.

show collections

Показывает список коллекций (таблиц) в выбранной базе.

db.dropDatabase()

Удаляет текущую базу данных.

show dbs

Показывает список баз данных. То же самое, что и show databases.

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

Добавляет один документ в коллекцию users.

db.users.find()

Находит все документы в коллекции users.

db.users.insertMany([
    {name: "vasja", age: 28},
    {name: "petja", age: 23},
    {name: "dima", age: 35},
    {name: "anton", age: 24},
    {name: "ulbi", age: 42}
])

Добавляет сразу несколько документов в users.

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

Ищет документы, где age равен 25.

db.users.find({age:25, name: "ulbitv"})

Ищет документы, где age = 25 и name = “ulbitv”.

db.users.find({$or:[{age:35}, {name: "ulbity"}]})

Находит тех, кто:

  • либо age = 35
  • либо name = “ulbity”
  • (или оба сразу)
db.users.find({age:{$lt:28}})

меньше

db.users.find({age:{$lte:28}})

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

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

больше

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

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

db.users.find({age:{$ne:28}})

не равно

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

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

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

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

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

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

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

Возвращает один документ, подходящий под условие.

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

Обновляет один документ по условию.

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

Обновляет все документы. В этом случае — переименовывает поле name в fullname.

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

Удаляет один документ по условию.

db.users.bulkWrite([
    {
        insertOne: {
            document: {fullname: "nastja", age:18}
        }
    },
    {
        deleteOne:{
            filter: {fullname: "petja"}
        }
    }]
)

Выполняет несколько операций сразу. В этом случае:

  1. Вставляет nastja, 18 лет
  2. Удаляет petja
db.users.update(
    {fullname: "vasja"},
    {
        $set: {
            posts: [
                {title: 'javascript', text: 'js top'},
                {title: 'mongo', text: 'mongo database'}
            ]
        }
    }
)

Добавляет поле posts — массив постов (статей) пользователю “vasja”.

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

Находит пользователя “vasja” и показывает только поле posts.

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

Ищет документы, в которых в массиве posts есть элемент с title = javascript.

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

Находит документы, где существует поле posts.

Подключение MongoDB Cloud (https://cloud.mongodb.com/) к базе данных через Node.js

const { MongoClient } = require('mongodb');

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

const start = async()=> {
    try{
        await client.connect()
        console.log('Connected to MongoDB')
        await client.db().collection('users')
        const users = await client.db().collection('users')
        users.insertOne({name: 'ulbi tv', age:23})
        const user = await users.findOne({name: 'ulbi tv'})
        console.log(user)
    } catch (e){
        console.log(e)
    }
}
start()