Шпаргалка по работе с MongoDB

Прошёл тут мини-курс от Георгия Дударя. Ознакомиться с курсом можно по ссылке: https://www.youtube.com/hashtag/goshamongodb. И здесь я приведу краткий конспект курса.

Установку MongoDB в Linux Mint я делал по 2-м мануалам.

В процессе установки на 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"}}}
])

Тэги:

Тэг в списке: