Skip to content

Commit

Permalink
Add mongodb kbase - 1
Browse files Browse the repository at this point in the history
  • Loading branch information
laspavel committed Jan 28, 2024
1 parent 21e2a75 commit 40d3d4d
Showing 1 changed file with 219 additions and 0 deletions.
219 changes: 219 additions & 0 deletions 01.db/10010.mongodb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,219 @@
# mongodb - Справочник запросов

### Операции с БД

Подключиться с паролем:
```
mongo -u 'root' -p 'pass' --authenticationDatabase "admin"
```

Показать список баз:
```
show dbs
db.adminCommand('listDatabases')
```

Показать текущую БД:
```
db
```

Список пользователей:
```
db.getUsers()
```

Восстановление БД (Выбираем use)
```
db.repairDatabase()
```





### Операции с пользователями

Создать пользователя:
```
use <database>
db.createUser({user: "USER", pwd: "PASSWORD", roles: [{role: "readWrite", db: "DATABASE"}]})
```

Удалить пользователя:
```
admin.dropUser( "USER1" )
```

### Операции с коллекциями:

Просмотреть список всех коллекций в текущей БД:
```
show collections
```

Создание коллекции
```
db.createCollection("name")
db.createCollection(«profile», {capped:true, size:8000, max: 100})
/* Ограниченная коллекция размером 8000 байт и максимальным количеством документов 100. Если все место под коллекцию заполнено (например, выделенные нами 9500 байтов), а количество документов еще не достигло максимума, то в этом случае при добавлении нового документа самый старый документ будет удаляться, а на его место будет вставляться новый документ.
*/
```

Переименование коллекции:
```
db.users.renameCollection("NEWNAME")
```

### Операции с документами

Вставка в документа:
```
db.users.insert ({«name»: «Tom», «age»: 28, languages: [«english», «spanish»]})
document=({«name»: «Bill», «age»: 32, languages: [«english», «french»]})
db.users.insert(document)
db.posts.insert( [
{title: "blog post 1 title", body: "blog post 1 content"},
{title: "blog post 2 title", body: "blog post 2 content"},
])
```

Обновление документов:
```
db.posts.updateOne({"_id": 1}, {$set: {"title": 'updated title'}})
db.posts.update({"category": "technology"}, {$set: {"category": 'computer science'}})
```
> Ограничение имен ключей:
> * Символ $ не может быть первым символом в имени ключа
> * Имя ключа не может содержать символ точки .
> * _id не рекомендуется использовать
Вывод содержимого коллекции документов:
```
db.users.find()
db.posts.find().pretty() // Вывод с JSON форматированием
db.users.find().limit(3) // Вывести только 3 документа
db.users.find().skip(3) // Пропустить первые 3 записи
db.users.find().sort({name: 1}) // Сортировать: по возрастанию (1) или по убыванию (-1)
db.users.find().sort({name: 1}).skip(3).limit(3) // Все в одном
```

Поиск по коллекции документов:
```
db.users.find({name: «Tom»})
db.users.find({name: «Tom», age: 32}) // Логическое И
db.users.find({name: «Tom»}, {age: 1}) // Вывести только свойство age
db.users.find({name: «Tom»}, {age: 1}) // Вывести все свойства кроме age
```

Группировка документов:
```
db.users.count()
db.users.find({name: «Tom»}).count() // Только определенных документов
db.users.distinct("name") // Уникальные документы в рамках поля 'name'
```

Удаление:

```
db.users.remove({name : «Tom»})
db.users.remove({}) // Удалить все коллекции из документов
db.users.drop() // Удалить коллекцию
db.dropDatabase() // Удалить БД
```
### Работа с индексами

Добавление:
```
db.posts.createIndex({"title": 1})
db.posts.createIndex({"title": 1, "date": 1}) // Составной индекс
```

Получение списка индексов:
```
db.posts.getIndexes()
```


Удаление:
```
db.posts. dropIndex("title_1")
```

Статистика:
```
db.posts.stats() // Статистика по индексам
db.posts.totalIndexSize() // Размер индекса
```

### Состояние сервера


Показать коннекты текущее состояние
```
db.serverStatus()
db.serverStatus().connections
db.serverStatus().metrics
db.serverStatus().metrics.commands
```

Счетчик коннектов
```
db.currentOp(true).inprog.reduce((accumulator, connection) => { ipaddress = connection.client ? connection.client.split(":")[0] : "Internal"; accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1; accumulator["TOTAL_CONNECTION_COUNT"]++; return accumulator; }, { TOTAL_CONNECTION_COUNT: 0 })
```

Cостояние реплика-сетов
```
rs.conf()
rs.status()
rs.printReplicationInfo()
```

### Бэкап и восстановление

Бекап и восстановление всех баз данных без сжатия:

```
mongodump --out /backup
mongorestore --dryRun -vvv --dir /backup // Режим dry-run
mongorestore --drop --dir /backup
```

Восстановление определенной коллекции:
```
mongorestore --drop -v --dir /backup --nsInclude 'mydb.mycollectionname'
```

Восстановление всех БД и коллекций кроме определенной коллекции:
```
mongorestore --drop -v --dir /backup --nsExclude 'mydb.mycollectionname'
```

Бекап и восстановление всех баз данных с сжатием:
```
mongodump --gzip --out /backup
mongorestore --gzip --drop --dir /backup
```

Бэкап и восстановление всех БД с сжатием в один архив:
```
mongodump --gzip --archive=/backup/mybackup.gz
mongorestore --gzip --drop --archive=/backup/mybackup.gz
```

Бэкап определенной БД:
```
mongodump --gzip -d mydb
```

Бекап одной коллекции из базы данных:
```
mongodump --gzip -d mydb -c mycollection
```

---
* https://www.mongodb.com/docs/manual/reference/configuration-file-settings-command-line-options-mapping/
* https://www.mongodb.com/docs/manual/reference/ulimit/#recommended-settings


0 comments on commit 40d3d4d

Please sign in to comment.