Commandes essentielles pour survivre en production MongoDB.
Connexion
# Connexion localemongosh
# Connexion avec authmongosh-uadmin-ppassword--authenticationDatabaseadmin
# Connexion distantemongosh"mongodb://user:password@host:27017/dbname"# Connexion replica setmongosh"mongodb://host1:27017,host2:27017,host3:27017/dbname?replicaSet=rs0"# Exécuter une commandemongosh--eval"db.serverStatus()"
Commandes Shell
Commande
Description
show dbs
Lister les bases
use dbname
Sélectionner une base
show collections
Lister les collections
db.stats()
Stats de la base
db.coll.stats()
Stats d'une collection
db.coll.getIndexes()
Index d'une collection
db.getUsers()
Lister les users
db.currentOp()
Opérations en cours
db.serverStatus()
Statut serveur
exit
Quitter
CRUD Rapide
Create
// Insérer un documentdb.users.insertOne({name:"John",age:30})// Insérer plusieursdb.users.insertMany([{name:"Jane",age:25},{name:"Bob",age:35}])
Read
// Tous les documentsdb.users.find()// Avec filtredb.users.find({age:{$gte:30}})// Un seuldb.users.findOne({name:"John"})// Projectiondb.users.find({},{name:1,_id:0})// Tri + limitedb.users.find().sort({age:-1}).limit(5)// Countdb.users.countDocuments({age:{$gte:30}})
Update
// Modifier un documentdb.users.updateOne({name:"John"},{$set:{age:31}})// Modifier plusieursdb.users.updateMany({age:{$lt:30}},{$set:{category:"young"}})// Incrémenterdb.users.updateOne({name:"John"},{$inc:{age:1}})// Ajouter à un arraydb.users.updateOne({name:"John"},{$push:{tags:"vip"}})// Upsertdb.users.updateOne({name:"New"},{$set:{age:20}},{upsert:true})
Delete
// Supprimer undb.users.deleteOne({name:"John"})// Supprimer plusieursdb.users.deleteMany({age:{$lt:18}})// Supprimer tousdb.users.deleteMany({})// Drop collectiondb.users.drop()
Opérateurs de Requête
Opérateur
Exemple
Description
$eq
{ age: { $eq: 30 } }
Égal
$ne
{ age: { $ne: 30 } }
Différent
$gt
{ age: { $gt: 25 } }
Plus grand
$gte
{ age: { $gte: 25 } }
Plus grand ou égal
$lt
{ age: { $lt: 40 } }
Plus petit
$lte
{ age: { $lte: 40 } }
Plus petit ou égal
$in
{ age: { $in: [25, 30] } }
Dans la liste
$nin
{ age: { $nin: [25, 30] } }
Pas dans la liste
$and
{ $and: [{...}, {...}] }
ET logique
$or
{ $or: [{...}, {...}] }
OU logique
$exists
{ phone: { $exists: true } }
Champ existe
$regex
{ name: { $regex: /^J/i } }
Expression régulière
Index
// Créer un indexdb.users.createIndex({email:1})// Index uniquedb.users.createIndex({email:1},{unique:true})// Index composédb.users.createIndex({lastName:1,firstName:1})// Index TTL (expiration auto)db.sessions.createIndex({createdAt:1},{expireAfterSeconds:3600})// Index textdb.articles.createIndex({title:"text",content:"text"})// Lister les indexdb.users.getIndexes()// Supprimer un indexdb.users.dropIndex("email_1")// Analyser une requêtedb.users.find({email:"test@test.com"}).explain("executionStats")
Aggregation
// Pipeline simpledb.orders.aggregate([{$match:{status:"completed"}},{$group:{_id:"$customerId",total:{$sum:"$amount"}}},{$sort:{total:-1}},{$limit:10}])// Lookup (JOIN)db.orders.aggregate([{$lookup:{from:"customers",localField:"customerId",foreignField:"_id",as:"customer"}},{$unwind:"$customer"}])// Count par groupedb.users.aggregate([{$group:{_id:"$country",count:{$sum:1}}}])
Utilisateurs
// Créer un adminuseadmindb.createUser({user:"admin",pwd:"password",roles:["userAdminAnyDatabase","readWriteAnyDatabase"]})// Créer un user pour une baseusemydbdb.createUser({user:"myuser",pwd:"password",roles:[{role:"readWrite",db:"mydb"}]})// User read-onlydb.createUser({user:"readonly",pwd:"password",roles:[{role:"read",db:"mydb"}]})// Lister les usersdb.getUsers()// Supprimer un userdb.dropUser("myuser")
Backup & Restore
# Dump une basemongodump--dbmydb--out/backup/
# Dump avec authmongodump-uadmin-ppassword--authenticationDatabaseadmin--dbmydb--out/backup/
# Dump compressémongodump--dbmydb--gzip--archive=/backup/mydb.gz
# Restoremongorestore--dbmydb/backup/mydb/
# Restore depuis archivemongorestore--gzip--archive=/backup/mydb.gz
# Dump une collectionmongodump--dbmydb--collectionusers--out/backup/
Replica Set
// Statut du replica setrs.status()// Configurationrs.conf()// Ajouter un membrers.add("host:27017")// Ajouter un arbiterrs.addArb("arbiter:27017")// Retirer un membrers.remove("host:27017")// Forcer une électionrs.stepDown()// Info réplicationrs.printReplicationInfo()rs.printSecondaryReplicationInfo()
Monitoring
// Statut serveurdb.serverStatus()// Opérations en coursdb.currentOp()// Opérations lentesdb.currentOp({"secs_running":{$gte:5}})// Tuer une opérationdb.killOp(opId)// Profiler (slow queries)db.setProfilingLevel(1,{slowms:100})db.system.profile.find().sort({ts:-1}).limit(5)// Stats mémoiredb.serverStatus().memdb.serverStatus().wiredTiger.cache