MongoDB

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Consulter les fichiers partagés sur le FTP
Le Redmine : Consulter le Redmine

MongoDB

Communautés

https://launchpass.com/mongo-db

Installer MongoDB sur Debian 9 Stretch

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
# echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.6 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
sudo apt-get update
sudo apt-get install mongodb
sudo systemctl enable mongodb.service
sudo service mongodb start
localhost:27017
Affiche : It looks like you are trying to access MongoDB over HTTP on the native driver port.
Voir le message d'erreur pour DemocracyOS !
Source : https://www.visionduweb.eu/wiki/index.php?title=Ajouter_Docker_sur_GNU_Linux#Installer_une_image_Docker_democracyos
nano /etc/mongodb.conf
# bind_ip = 0.0.0.0
bind_ip = 127.0.0.1
port = 27017
Step 2 - Securing MongoDB with a Firewall : https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-debian-8#step-2-%E2%80%94-securing-mongodb-with-a-firewall
Source : https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-debian-8

Vérifier l'état du service

systemctl status mongodb
● mongodb.service - An object/document-oriented database
  Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
  Active: active (running) since Thu 2018-01-11 15:17:33 CET; 28min ago
    Docs: man:mongod(1)
Main PID: 531 (mongod)
   Tasks: 16 (limit: 4915)
  Memory: 61.3M
     CPU: 6.835s
  CGroup: /system.slice/mongodb.service
          └─531 /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf
janv. 11 15:17:33 debian systemd[1]: Started An object/document-oriented database.

Lancer le shell

/usr/bin/mongo
MongoDB shell version: 3.2.11
connecting to: test
>
Ctrl+C pour quitter le shell.

Obtenir le numéro de version

db.runCommand({buildinfo: 1});

Affiche :

{
	"version" : "3.2.11",
	"gitVersion" : "009580ad490190ba33d1c6253ebd8d91808923e4",
	"modules" : [ ],
	"allocator" : "tcmalloc",
	"javascriptEngine" : "mozjs",
	"sysInfo" : "deprecated",
	"versionArray" : [
		3,
		2,
		11,
		0
	],
	"openssl" : {
		"running" : "OpenSSL 1.0.2l  25 May 2017",
		"compiled" : "OpenSSL 1.0.2l  25 May 2017"
	},
	"buildEnvironment" : {
		"distmod" : "",
		"distarch" : "x86_64",
		"cc" : "cc: cc (Debian 6.3.0-18) 6.3.0 20170516",
		"ccflags" : "-fno-omit-frame-pointer -fPIC -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Wno-nonnull-compare -Wno-overflow -Winvalid-pch -Werror -O2 -Wno-unused-local-typedefs -Wno-unused- function -Wno-deprecated-declarations -Wno-unused-const-variable -Wno-unused-but-set-variable -Wno-missing-braces -fno-builtin-memcmp",
		"cxx" : "g++: g++ (Debian 6.3.0-18) 6.3.0 20170516",
		"cxxflags" : "-g -O2 -fdebug-prefix-map=/build/mongodb-1CBSnj/mongodb-3.2.11=. -fstack-protector-strong -Wformat -Werror=format-security -Wnon-virtual-dtor -Woverloaded-virtual -Wno-maybe-uninitialized -std=c++11",
		"linkflags" : "-Wl,-z,relro -fPIC -pthread -Wl,-z,now -rdynamic -fuse-ld=gold -Wl,-z,noexecstack -Wl,--warn-execstack",
		"target_arch" : "x86_64",
		"target_os" : "linux"
	},
	"bits" : 64,
	"debug" : false,
	"maxBsonObjectSize" : 16777216,
	"storageEngines" : [
		"devnull",
		"ephemeralForTest",
		"mmapv1",
		"wiredTiger"
	],
	"ok" : 1
 }
 >

Lister les bases de données

Pas de commande de création explicite comme en SQL.
Avec la commande use, MongoDB prépare en quelque sorte une base de données temporaire.
Lorsque des données sont insérées la base de données est alors définitivement créée.
show dbs
show dbs

Affiche :

local  0.000GB
use admin
Comme MongoDB vient d'être installé il est normal qu’aucune base de données n’apparaisse !
Il est possible d’obtenir davantage d’informations en utilisant la base de données admin réservée à l’administrateur.
use admin

Affiche :

switched to db admin
Afficher des informations complémentaires
db.runCommand({listDatabases: 1});

Affiche :

{
	"databases" : [
		{
			"name" : "local",
			"sizeOnDisk" : 73728,
			"empty" : false
		}
	],
	"totalSize" : 73728,
	"ok" : 1
 }
 >

Créer une collection

Une collection est l'équivalent d'une table.
db.createCollection('gens');

Affiche :

{ "ok" : 1 }
Insérer un document dans une collection
db.gens.insert( { nom: "ferrandez", prenom:"sebastien", age: 35 } );

Affiche :

WriteResult({ "nInserted" : 1 })
Lister les documents dans une collection
Équivalent à un SELECT * FROM gens
db.gens.find();

Affiche :

{ "_id" : ObjectId("5a5789a0c2249f87b72eb259"), "nom" : "ferrandez", "prenom" : "sebastien", "age" : 35 }
Insérer un nouveau document
db.gens.insert( { nom: "ferrandez", prenom:"sandrine", age: 34, sexe:"F" } );
db.gens.find();

Affiche :

{ "_id" : ObjectId("517941f3b12e1948c04f6d5e"), "nom" : "ferrandez", "prenom" : "sebastien", "age" : 35 }
{ "_id" : ObjectId("51794334b12e1948c04f6d5f"), "nom" : "ferrandez", "prenom" : "sandrine", "age" : 34, "sexe" : "F" }
Le nombre de champs n’est pas contraint par le du schéma.
Forcer son id
Les objets JSON enregistrés ont un champ _id déterminé par MongoDB.
Il est possible de forcer le sien.
Il est possible de manipuler des identifiants auto-incrémentés mais si vous insistez pour utiliser ce mécanisme offert par certains SGBDR comme MySQL c’est peut-être que vous avez une vision trop « relationnelle » de vos données ! *(1)
db.gens.insert( { _id: 10, nom: "ferrandez", prenom:"christophe", age: 40 } );
db.gens.find();

Affiche :

{ "_id" : ObjectId("517941f3b12e1948c04f6d5e"), "nom" : "ferrandez", "prenom" : "sebastien", "age" : 35 }
{ "_id" : ObjectId("51794334b12e1948c04f6d5f"), "nom" : "ferrandez", "prenom" : "sandrine", "age" : 34, "sexe" : "F" }
{ "_id" : 10, "nom" : "ferrandez", "prenom" : "christophe", "age" : 40 }

Supprimer une collection

db.gens.drop();
true

Supprimer une base de données

Utiliser use pour se connecter à la base de données à effacer
show dbs;

Affiche :

 admin   0.203125GB
 gens    0.203125GB
 local   (empty)
use gens;

Affiche :

 switched to db gens
 db.runCommand({dropDatabase: 1});
 { "dropped" : "gens", "ok" : 1 }
show dbs;

Affiche :

 admin   0.203125GB
 local   (empty)
Utiliser directement une commande
db.gens.runCommand({dropDatabase: 1});

Affiche :

 { "dropped" : "gens", "ok" : 1 }

Requêter sur des données

Jeu de données au démarrage

db.gens.insert({"nom":"ferrandez"});
db.gens.insert({"nom":"ferrandez", prenom: "léo"});
db.gens.insert({"nom":"ferrandez", prenom: "maïa", age:6});
db.gens.find();
{ "_id" : ObjectId("517a850cb1d6ce34f91af2d1"), "nom" : "ferrandez" }
{ "_id" : ObjectId("517a851eb1d6ce34f91af2d2"), "nom" : "ferrandez", "prenom" : "léo" }
{ "_id" : ObjectId("517a856bb1d6ce34f91af2d4"), "nom" : "ferrandez", "prenom" : "maïa", "age" : 6 }
Index
Poser un index sur le champ nom dans l’ordre ascendant (1, -1 pour DESC) :
db.gens.ensureIndex({nom:1});
Index composé
Poser un index composé des champs nom ET prenom (ASC tous les deux) :
db.gens.ensureIndex({nom:1, prenom:1});
Index unique
Poser un index unique
db.gens.ensureIndex({nom:1}, {unique: true});
La pose de cet index va échouer car le champ nom contient les mêmes valeurs :
db.gens.ensureIndex({nom:1}, {unique: true});
E11000 duplicate key error index: gens.gens.$nom_1  dup key: { : "ferrandez" }
Voir les index d’une collection
db.gens.getIndexes();
Supprimer un index
On va supprimer l’index nommé ‘nom_1_prenom_1’ :
db.gens.dropIndex('nom_1_prenom_1')

Les requêtes

Sur une seule valeur
Cherchons toutes les personnes qui ont 6 ans :
db.gens.find({age:6});
Cherchons toutes les personnes qui s’appellent « ferrandez » :
db.gens.find({nom:"ferrandez"});
Sur deux valeurs
Cherchons toutes les personnes qui ont 6 ans et qui s’appellent « ferrandez » :
db.gens.find({nom:"ferrandez", age:6});

Avec des opérateurs de comparaison

Cherchons tous les « ferrandez » qui ont plus de 6 ans (gt = greater than)
db.gens.find({nom:"ferrandez", age: {$gt: 6}});
Cherchons tous les « ferrandez » qui ont moins de 6 ans (lt = less than)
db.gens.find({nom:"ferrandez", age: {$lt: 6}});
Moins que ou égal à.
db.gens.find({nom:"ferrandez", age: {$lte: 6}});
Plus que ou égal à.
db.gens.find({nom:"ferrandez", age: {$gte: 6}});

L’équivalent du IN SQL

Les gens dont l’âge est 6, 7 ou 8 :
db.gens.find({age: {$in: [6, 7, 8]}});

Les expressions régulières (regexp)

Les gens dont le nom commence par la lettre f :
db.gens.find({nom:/^f/});

Ressources complémentaires

Ok-ko.png Manuel MongoDB - Les commandes de MongoDB : https://docs.mongodb.com/manual/crud/
Ok.png MongoDB les bases pour débuter 1/3 : http://www.lafabriquedecode.com/blog/2013/04/mongodb-les-bases-pour-bien-debuter/ (*1)
Ok.png MongoDB Les bases pour bien débuter 2/3 : http://www.lafabriquedecode.com/blog/2013/04/mongodb-les-bases-pour-bien-debuter-suite/
Ok-ko.png MongoDB Les bases pour bien débuter 3/3 : http://www.lafabriquedecode.com/blog/2013/04/mongodb-les-bases-pour-bien-debuter-fin/
Ok-ko.png MongoDB : Commandes de base : https://buzut.fr/commandes-de-base-de-mongodb/
Ok-ko.png MongoDB : https://doc.ubuntu-fr.org/mongodb
Ok-ko.png MongoDB avec Node.js : http://webiose.com/2016/03/tuto-utiliser-mongodb-avec-node-js/

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de VisionDuWeb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows en lisant la page dédié à la sécurité.
Améliorer le contenu des pages avec vos propositions depuis l'onglet discussion.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.