MongoDB

De Wiki Amis SH
Aller à la navigation Aller à la recherche



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


MongoDB

Communautés

MongoDB Community : 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://wiki.visionduweb.fr/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

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

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
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 Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

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 :
Miner de la cryptomonnaie.