====== MongoDB ====== ---- ===== Installation ===== ==== Installation Redhat 9 ==== === Configuration dépôt === Créer le fichier /etc/yum.repos.d/mongodb-org-x.0.repo [mongodb-org-x.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/x.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://pgp.mongodb.com/server-x.0.asc === Installation === sudo dnf install mongodb-org ==== Configuration ==== Paramétrage dans le fichier /etc/mongod.conf === Interface et port d'écoute === net: port: 27017 # port d'écoute bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. === Activation TLS === net: ... tls: mode: requireTLS certificateKeyFile: /etc/ssl/certs/serveur.pem CAFile: /usr/local/share/ca-certificates/ca.crt ==== Fichiers ==== * ~/.dbshell : historique des commandes * ~/.mongorc.js : fichier dans lequel on peut définir des variables, customiser le prompt mongo ... * /etc/mongorc.js : même chose au niveau global (évalué avant le fichier de l'utilisateur) ===== Accès ===== ==== Identification ==== === Accès sans mot de passe === mongosh -u === Accès avec mot de passe === mongosh -u -p mongo 10.1.1.189:27017 -u mongoadmin -p M0ng0@dmin --authenticationDatabase admin mongo --host 10.1.1.189 --port 27017 -u mongoadmin -p M0ng0@dmin --authenticationDatabase admin === Connexion en TLS === sudo mongosh 127.0.0.1:27017 -u mongoadmin -p 'M0ng0@dmin' --authenticationDatabase admin --tls --tlsCAFile /usr/local/share/ca-certificates/caroot.cer ==== Réinitialiser utilisateur ==== sudo systemctl stop mongod sudo mongod --dbpath /var/lib/mongo --port 27017 --bind_ip 127.0.0.1 --noauth mongosh --port 27017 use admin db.system.users.find().pretty() use admin db.dropUser("mongosuperadmin") db.dropUser("mongoadmin") db.createUser( { user: "mongosuperadmin", pwd: "M0ng0super@dmin", roles: [ { role: "root", db: "admin" } ] } ) db.createUser( { user: "mongoadmin", pwd: "M0ng0@dmin", roles: [ { role: "dbOwner", db: "lbs" } ] } ) sudo chown -R mongod: /var/lib/mongo sudo systemctl start mongod mongo < mongo.script ---- ===== Commandes de base ===== ==== Lister les bases de données ==== show dbs use show tables === findOne === Il n'y a pas de structure à proprement parlé dans mongo mais il est possible d'afficher un élément pour avoir une idée de la structure : db..findOne() === find === * Affiche tous les enregistrements d'une table db.
.find( { } , { } ) Par défaut mongodb n'affiche que les 20 premiers éléments trouvés * Pour compter le nombre d'enregistrements trouvés db.
.find( { } , { } ).count() * Pour afficher tous les enregistrements trouvés (et non pas les 20 premiers) db.
.find( { } , { } ).limit(0) # taper it pour afficher la suite db.
.find( { } , { } ).forEach(printjson) db.
.find( { } , { } ).toArray() * Affiche certains champs sous condition db.
.find( { "" : "valeur" } , { "champ2" : 1 , "_id": 0 } ) Affiche le champ "champ2" de tous les enregistrements dont le champ "champ1" vaut "valeur". Le champ id est normalement affiché par défaut du coup on demande à ne pas l'afficher. * Liste les enregistrements dont champ.souschamp a une valeur donnée db.
.find({"champ.souschamp": { $regex: "toto"} }) # valeur = toto db.
.find({"champ.souschamp": { $regex: "toto"} , $options: "i"}) # indépendamment minuscule/majuscule * Liste les enregistrements dont champ.souschamp est égal à toto db.
.find({"champ.souschamp": "toto" }) === update === db.
.updateOne({ }, { }) db.users.updateOne({ "name": "Alice" }, { $set: { "age": 31 } }) # modifie le champ age de l'enregistrement Alice. Si le champ n'existe pas il est créé. db.
.updateMany({ }, { }) # pour modifier plusieurs enregistrement répondant au critère db.
.replaceOne({ }, { "champ1" : "val1" , "champ2" : "val2" ,... } ) # pour remplacer intégralement l'enregistrement * **$set** : Met à jour la valeur d'un champ, ou ajoute le champ s'il n'existe pas * **$unset** : Supprime un champ * **$inc** : Incrémente la valeur d'un champ numérique * **$push** : ajouter un élément à un tableau * **$pull** : retirer un élément à un tableau * **$rename** : Renomme un champ db.
.updateOne({ "champ": { $regex: "pattern" } }, [{ $set: { "champ": { $replaceOne: { input: "$champ", find: "oldChar", replacement: "newChar" } } } }]) # Remplacer une chaîne de caractères par une autre db.
.updateOne({ "champ": { $regex: "pattern" } }, [{ $set: { "champ": { $replaceAll: { input: "$champ", find: "oldChar", replacement: "newChar" } } } }]) # Remplacer toutes les occurrences d'une chaîne de caractères ==== Exécution de commandes ==== === Exécution d'une commande depuis le shell === mongo --host <@IP> --port -u -p --authenticationDatabase --eval '' === Exécution d'un fichier de commande === mongo --host <@IP> --port -u -p --authenticationDatabase < fichier_requetes === Options === * --tls : si Mongo est configuré pour utilisation SSL/TLS * --quiet : exécution en mode silencieux ==== Résultat dans un fichier ==== * Redirection shell simple mongo --host <@IP> --port -u -p --authenticationDatabase --eval '' > resultat.txt * fichier CSV avec mongoexport mongoexport --host <@IP> --port -u -p --authenticationDatabase --db= --collection=
--query='{}' --out resultat.csv --type=csv --fields=champ1,champ2,champ3,... ---- ===== Manipulation bdd ===== ==== Backup/Restore ==== === Exporter une base de données === mongodump --host= --port=27017 -u -p --authenticationDatabase=admin --out= ----