Шпаргалка по работе с 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"}}}
])