112 lines
3.9 KiB
Markdown
112 lines
3.9 KiB
Markdown
# MongoDB: установка и базовое использование
|
||
|
||
Краткая инструкция по установке MongoDB на Windows и запуску в Docker, подключению через `mongosh` и базовым операциям.
|
||
|
||
## Вариант A: Docker (рекомендуется для практикума)
|
||
|
||
```bash
|
||
# Запуск 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` (если установлен локально):
|
||
```bash
|
||
mongosh "mongodb://root:StrongPass!@localhost:27017/?authSource=admin"
|
||
```
|
||
|
||
Создание приложения БД/пользователя:
|
||
```javascript
|
||
use appdb
|
||
|
||
db.createUser({
|
||
user: "appuser",
|
||
pwd: "AppUserPass!",
|
||
roles: [ { role: "readWrite", db: "appdb" } ]
|
||
})
|
||
```
|
||
|
||
Проверка записи/чтения:
|
||
```javascript
|
||
db.items.insertOne({ name: "sensor-1", type: "pressure", value: 28.5 })
|
||
db.items.find()
|
||
```
|
||
|
||
Останов/старт/удаление контейнера:
|
||
```bash
|
||
docker stop mongo && docker start mongo && docker rm -f mongo
|
||
```
|
||
|
||
## Полезные команды `mongosh`
|
||
```javascript
|
||
// Показать базы/коллекции
|
||
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": "" } }
|
||
)
|
||
```
|
||
|