// Pipeline d'agrégation complexe
db.ventes.aggregate([
// Filtrer les ventes de 2024
{
$match: {
date: {
$gte: new Date('2024-01-01'),
$lt: new Date('2025-01-01')
}
}
},
// Grouper par mois et catégorie
{
$group: {
_id: {
mois: { $month: "$date" },
categorie: "$categorie"
},
total: { $sum: "$montant" },
nbVentes: { $count: {} }
}
},
// Trier par mois et total
{
$sort: {
"_id.mois": 1,
"total": -1
}
}
])
$match - Filtre les documents
$group - Regroupe les documents
$project - Sélectionne ou transforme les champs
$lookup - Effectue une jointure avec une autre collection
$unwind - Décompose un tableau en documents individuels
// Démarrer une session
const session = db.getMongo().startSession();
try {
// Démarrer une transaction
session.startTransaction();
// Opérations dans la transaction
db.comptes.updateOne(
{ _id: compte1Id },
{ $inc: { solde: -100 } },
{ session }
);
db.comptes.updateOne(
{ _id: compte2Id },
{ $inc: { solde: 100 } },
{ session }
);
// Valider la transaction
session.commitTransaction();
} catch (error) {
// Annuler en cas d'erreur
session.abortTransaction();
} finally {
session.endSession();
}
// Activer le sharding sur une base
sh.enableSharding("maBase")
// Définir une clé de sharding
sh.shardCollection(
"maBase.maCollection",
{ champCle: "hashed" }
)
// Vérifier le statut
sh.status()
// Créer un index 2dsphere
db.lieux.createIndex(
{ location: "2dsphere" }
)
// Recherche par proximité
db.lieux.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [-73.9667, 40.78]
},
$maxDistance: 1000
}
}
})
// Créer un index textuel
db.articles.createIndex(
{ titre: "text", contenu: "text" }
)
// Recherche plein texte
db.articles.find({
$text: {
$search: "mongodb nosql",
$language: "french"
}
})
// Initialiser un replica set
rs.initiate({
_id: "monReplicaSet",
members: [
{ _id: 0, host: "srv1:27017" },
{ _id: 1, host: "srv2:27017" },
{ _id: 2, host: "srv3:27017" }
]
})
// Vérifier le statut
rs.status()
// Lecture depuis secondaire
db.collection.find().readPref("secondary")
// Écriture avec majorité
db.collection.insertOne(
{ doc: 1 },
{ writeConcern: { w: "majority" } }
)