3.9 KiB
3.9 KiB
MongoDB: установка и базовое использование
Краткая инструкция по установке MongoDB на Windows и запуску в Docker, подключению через mongosh и базовым операциям.
Вариант A: Docker (рекомендуется для практикума)
# Запуск MongoDB (порт 27017), создание пользователя root
# Замените StrongPass! на свой пароль
docker run -d --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=StrongPass! -v mongo_data:/data/db mongo:7
Подключение mongosh (если установлен локально):
mongosh "mongodb://root:StrongPass!@localhost:27017/?authSource=admin"
Создание приложения БД/пользователя:
use appdb
db.createUser({
user: "appuser",
pwd: "AppUserPass!",
roles: [ { role: "readWrite", db: "appdb" } ]
})
Проверка записи/чтения:
db.items.insertOne({ name: "sensor-1", type: "pressure", value: 28.5 })
db.items.find()
Останов/старт/удаление контейнера:
docker stop mongo && docker start mongo && docker rm -f mongo
Полезные команды mongosh
// Показать базы/коллекции
show dbs
use appdb
show collections
// CRUD
db.devices.insertMany([{name:"compressor-A", status:"online"},{name:"compressor-B", status:"offline"}])
db.devices.find({status:"online"})
db.devices.updateOne({name:"compressor-B"}, {$set: {status:"online"}})
db.devices.deleteOne({name:"compressor-A"})
// Индекс
db.devices.createIndex({status:1})
// Фильтры (сравнение, логика, диапазоны)
db.devices.find({status: {$in: ["online", "maintenance"]}})
db.readings.find({value: {$gte: 10, $lt: 50}})
db.readings.find({$and: [{type:"pressure"}, {value: {$gt: 100}}]})
// Проекция полей (включение/исключение)
db.devices.find({}, {name:1, status:1, _id:0})
// Сортировка, лимит, пропуск
db.readings.find({type:"temperature"}).sort({timestamp:-1}).limit(10)
db.readings.find({type:"temperature"}).sort({timestamp:1}).skip(20).limit(10)
// Составной запрос: фильтр + проекция + сортировка + пагинация
db.devices.find({status:"online"}, {name:1, status:1, _id:0}).sort({name:1}).skip(0).limit(5)
// Поддокументы/массивы
db.wells.insertOne({name:"Well-1001", sensors:[{type:"pressure", value:2800},{type:"temperature", value:85}]})
db.wells.find({"sensors.type":"pressure", "sensors.value": {$gt: 2500}})
// Встроенные (embedded) документы: вложенные поля, запросы и обновления
db.wells.insertOne({
name: "Well-1002",
location: { field: "Permian", coords: { lat: 31.77, lon: -102.39 } },
equipment: {
compressor: { model: "CMP-900", status: "online" },
valve: { type: "pressure_relief", lastService: ISODate("2025-10-01") }
}
})
// Поиск по вложенным полям (dot-notation)
db.wells.find({ "location.field": "Permian", "equipment.compressor.status": "online" }, { _id:0, name:1 })
// Проекция поддокумента
db.wells.find({ name: "Well-1002" }, { _id:0, equipment:1 })
// Обновление вложенного поля
db.wells.updateOne(
{ name: "Well-1002" },
{ $set: { "equipment.compressor.status": "maintenance" } }
)
// Добавление нового вложенного поля, если его не было
db.wells.updateOne(
{ name: "Well-1002" },
{ $set: { "equipment.sensorHub": { firmware: "1.2.3", ports: 8 } } }
)
// Удаление вложенного поля
db.wells.updateOne(
{ name: "Well-1002" },
{ $unset: { "equipment.valve.lastService": "" } }
)