Шпаргалка по работе с MongoDB
Прошёл тут мини-курс от Георгия Дударя. Ознакомиться с курсом можно по ссылке: https://www.youtube.com/hashtag/goshamongodb. И здесь я приведу краткий конспект курса.
Установку MongoDB в Linux Mint я делал по 2-м мануалам.
- https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
- https://losst.ru/kak-ustanovit-mongodb-v-ubuntu
В процессе установки на Linux Mint 19.3 Tricia у меня возникали проблемы конфликтов пакетов и загрузки из репозиториев. В конечном итоге я прописал репозитории, которые были указаны в официальном мануале по 1-й из ссылок приведённых выше по установке и добавил репозиторий из Ubuntu 16.04 (Xenial) с помощью команды:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.listПосле этого установка корректно продолжилась.
Запустить сервис MongoDB:
sudo systemctl start mongod
Проверить статус сервиса MongoDB:
sudo systemctl status mongod
Запустить консоль MongoDB:
mongo
Запустить графический интерфейс MongoDB Compass:
mongodb-compass
Подключиться к БД:
use [db_name]где
[db_name]
- это название БД
Создать коллекцию:
db.createCollection("articles")где
articles
- это название добавляемой коллекции
Удалить коллекцию:
db.articles.drop()где
articles
- это название удаляемой коллекции
Добавление данных
Добавить одно значение в коллекцию:
db.users.insertOne( { _id: 1, "name":"Jack", "email":"admin@mail.ru", "age":23, "hasCar":true, "favColor":["Green","Red","Black"], "child": {"name":"Jack","surname":"Charley","age":5} } )где
users
- это название коллекции, в которую добавляется значение
Добавить несколько значений в коллекцию:
db.users.insertMany([ { "name":"Ivan Ivanov", "email":"ivanov@gmail.com", "age":33, "hasCar":true, "favColor":["Green","Red","Black"], "child": {"name":"Jack","surname":"Charley","age":5} }, { "name":"Alexander Orlov", "email":"orlov@gmail.com", "age":21, "hasCar":false } ])где
users
- это название коллекции, в которую добавляется значение
Выборка данных
Простая выборка без фильтров:
db.users.find() db.users.find().limit(2) db.users.find({}, {_id: 0}).limit(2) db.users.find({}, {_id: 0}).sort({age: 1}) db.users.find({}, {_id: 0}).sort({age: -1}) db.users.find({}, {_id: 0}).sort({age: -1, email: -1}) db.users.find({}, {_id: 0}).sort({age: -1, email: -1}).limit(2)
Выборка по фильтрам:
db.users.find({age: 23}, {_id: 0}) db.users.find({age: 23, email: "orlov@gmail.com"}, {_id: 0}) db.users.find({$or: [{age: 21}, {email: "orlov@gmail.com"}]}, {_id: 0}) db.users.find({$or: [{age: {$lt: 38}}, {email: "orlov@gmail.com"}]}, {_id: 0}) db.users.find({$or: [{age: {$gt: 38}}, {email: "orlov@gmail.com"}]}, {_id: 0}) db.users.find({name: {$in: ["Jack", "John", "Konstantin Korepin"]}}, {_id: 0}) db.users.find({name: {$nin: ["Jack", "John", "Konstantin Korepin"]}}, {_id: 0}) db.users.find({child: {$exists:true}}, {_id: 0}) db.users.find({ favColor: {$size: 3} }, {_id: 0}) db.users.find({ "favColor.1": "Красный" }, {_id: 0}) db.users.find({ favColor: {$elemMatch: {$lte: 5}} }, {_id: 0})
Обновление данных:
db.users.updateOne({age: 23}, {$set: {age: 25}}) db.users.updateMany({age: 25}, {$set: {age: 23}}) db.users.updateMany({age: 23}, {$set: {name: "User", email: "test@mail.ru"}}) db.users.replaceOne( {age: 23}, {name: "New User", hasCar: true, password: "234", hasWife: true} )
Удаление данных:
db.users.deleteOne( {age: 23} ) db.users.deleteMany( {age: {$gte: 22}, age: {$lte: 38}} )
Объединение запросов:
db.users.bulkWrite([ { insertOne : { "document": {name: "Mike", age: 45, email: "mike@test.ru"} } }, { deleteOne : { filter: {age: 21} } }, { updateOne : { filter: {name: "Mike"}, update: {$set: {email: "new_email@test.ru"}} } }, { replaceOne: { filter: {name: "John"}, replacement: {name: "Джон", age: 45, email: "john@mail.ru"} } } ])
Поиск на совпадение в тексте:
db.articles.createIndex({title: "text", anons: "text", text: "text"}) db.articles.find({ $text: {$search: "Новые жители"}}) db.articles.find( { $text: {$search: "New residents"}}, {score: {$meta: "textScore"}} ).sort({score: {$meta: "textScore"}})
Моментальная обработка данных:
db.users.count({age: 21}) db.users.count({name: "Mike"}) db.users.distinct("email") db.users.aggregate([ {$match: {name: "Mike"}}, {$group: {_id: "$name", age: {$sum: "$age"}}} ])