Outils pour utilisateurs

Outils du site


all:bibles:langages:mongodb

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
all:bibles:langages:mongodb [2024/11/15 13:54] – [Installation] omeylhocall:bibles:langages:mongodb [2025/09/22 11:11] (Version actuelle) – [Identification] omeylhoc
Ligne 1: Ligne 1:
 +====== MongoDB ======
 +
 +----
 +
 +===== Installation =====
 +
 +==== Installation Redhat 9 ====
 +
 +=== Configuration dépôt ===
 +
 +Créer le fichier <color #00a2e8>/etc/yum.repos.d/mongodb-org-x.0.repo</color>
 +
 +<code bash>
 +[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
 +</code>
 +
 +=== Installation ===
 +
 +<code bash>
 +sudo dnf install mongodb-org
 +</code>
 +
 +==== Configuration ====
 +
 +Paramétrage dans le fichier <color #00a2e8>/etc/mongod.conf</color>
 +
 +=== Interface et port d'écoute ===
 +
 +<code bash>
 +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.
 +</code>
 +
 +=== Activation TLS ===
 +
 +<code bash>
 +net:
 +  ...
 +  tls:
 +    mode: requireTLS
 +    certificateKeyFile: /etc/ssl/certs/serveur.pem
 +    CAFile: /usr/local/share/ca-certificates/ca.crt
 +</code>
 +
 +==== 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 ===
 +
 +<code bash>
 +mongosh -u <user>
 +</code>
 +
 +=== Accès avec mot de passe ===
 +
 +<code bash>
 +mongosh -u <user> -p <password>
 +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
 +</code>
 +
 +=== Connexion en TLS ===
 +
 +<code bash>
 +sudo mongosh 127.0.0.1:27017 -u mongoadmin -p 'M0ng0@dmin' --authenticationDatabase admin --tls --tlsCAFile /usr/local/share/ca-certificates/caroot.cer
 +</code>
 +
 +==== Réinitialiser utilisateur ====
 +
 +<code bash>
 +sudo systemctl stop mongod
 +sudo mongod --dbpath /var/lib/mongo --port 27017 --bind_ip 127.0.0.1 --noauth
 +</code>
 +
 +<code bash>
 +mongosh --port 27017
 +</code>
 +
 +<code sql>
 +use admin
 +db.system.users.find().pretty()
 +</code>
 +
 +<code bash>
 +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" } ]
 +        }
 +)
 +</code>
 +
 +<code bash>
 +sudo chown -R mongod: /var/lib/mongo
 +sudo systemctl start mongod
 +mongo < mongo.script
 +</code>
 +
 +----
 +
 +===== Commandes de base =====
 +
 +==== Lister les bases de données ====
 +
 +<code mysql>
 +show dbs
 +use <db>
 +show tables
 +</code>
 +
 +=== 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 :
 +
 +<code mysql>
 +db.<table>.findOne()
 +</code>
 +
 +=== find ===
 +
 +  * Affiche tous les enregistrements d'une table
 +
 +<code mysql>
 +db.<table>.find( { } , { } )
 +</code>
 +
 +<note important>Par défaut mongodb n'affiche que les 20 premiers éléments trouvés</note>
 +
 +  * Pour compter le nombre d'enregistrements trouvés
 +
 +<code mysql>
 +db.<table>.find( { } , { } ).count()
 +</code>
 +
 +  * Pour afficher tous les enregistrements trouvés (et non pas les 20 premiers)
 +
 +<code mysql>
 +db.<table>.find( { } , { } ).limit(0)    # taper it pour afficher la suite
 +db.<table>.find( { } , { } ).forEach(printjson)
 +db.<table>.find( { } , { } ).toArray()
 +</code>
 +
 +  * Affiche certains champs sous condition
 +
 +<code mysql>
 +db.<table>.find( { "<champ1>" : "valeur" } , { "champ2" : 1 , "_id": 0 } )
 +</code>
 +
 +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
 +
 +<code mysql>
 +db.<table>.find({"champ.souschamp": { $regex: "toto"} })                  # valeur = toto
 +db.<table>.find({"champ.souschamp": { $regex: "toto"} , $options: "i"})   # indépendamment minuscule/majuscule 
 +</code>
 +
 +  * Liste les enregistrements dont champ.souschamp est égal à toto
 +
 +<code mysql>
 +db.<table>.find({"champ.souschamp": "toto" })
 +</code>
 +
 +=== update ===
 +
 +<code mysql>
 +db.<table>.updateOne({ <filter> }, { <update> })  
 +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.<table>.updateMany({ <filter> }, { <update> })                                      # pour modifier plusieurs enregistrement répondant au critère
 +db.<table>.replaceOne({ <filter> }, { "champ1" : "val1" , "champ2" : "val2" ,... } )   # pour remplacer intégralement l'enregistrement
 +</code>
 +
 +  * **$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
 +
 +<code mysql>
 +db.<table>.updateOne({ "champ": { $regex: "pattern" } }, [{ $set: { "champ": { $replaceOne: { input: "$champ", find: "oldChar", replacement: "newChar" } } } }]) # Remplacer une chaîne de caractères par une autre   
 +db.<table>.updateOne({ "champ": { $regex: "pattern" } }, [{ $set: { "champ": { $replaceAll: { input: "$champ", find: "oldChar", replacement: "newChar" } } } }]) # Remplacer toutes les occurrences d'une chaîne de caractères
 +</code>
 +
 +==== Exécution de commandes ====
 +
 +=== Exécution d'une commande depuis le shell ===
 +
 +<code bash>
 +mongo --host <@IP> --port <port> -u <user> -p <password> --authenticationDatabase <authDB> <database> --eval '<requete>'
 +</code>
 +
 +=== Exécution d'un fichier de commande ===
 +
 +<code bash>
 +mongo --host <@IP> --port <port> -u <user> -p <password> --authenticationDatabase <authDB> <database> < fichier_requetes
 +</code>
 +
 +=== Options ===
 +
 +  * <nowiki>--tls</nowiki> : si Mongo est configuré pour utilisation SSL/TLS
 +  * <nowiki>--quiet</nowiki> : exécution en mode silencieux
 +
 +==== Résultat dans un fichier ====
 +
 +  * Redirection shell simple
 +
 +<code bash>
 +mongo --host <@IP> --port <port> -u <user> -p <password> --authenticationDatabase <authDB> <DB> --eval '<requete>' > resultat.txt
 +</code>
 +
 +  * fichier CSV avec mongoexport
 +
 +<code bash>
 +mongoexport --host <@IP> --port <port> -u <user> -p <password> --authenticationDatabase <authDB> --db=<DB> --collection=<table> --query='{<requete>}' --out resultat.csv --type=csv --fields=champ1,champ2,champ3,...
 +</code>
 +
 +----
 +
 +===== Manipulation bdd =====
 +
 +==== Backup/Restore ====
 +
 +=== Exporter une base de données ===
 +
 +<code bash>
 +mongodump --host=<host> --port=27017 -u <user> -p <passwd>  --authenticationDatabase=admin --out=<repertoire>
 +</code>
 +
 +----