Mongodb

De knowledge
Aller à la navigation Aller à la recherche

Pour le moment je vais rester à un niveau très simple (le mien en mongo)

Utilisation

On part du principe que la base est locale (sur le serveur où on exécute les requêtes).

Connexion

On lance mongodb client

mongo

Le prompt mongo est ">".

C'est un shell intelligent. Les touches de curseur sont fonctionnelles comme dans bash. L'autocomplétion avec <Tab> est aussi fonctionelle.

Pour connaitre les bases accessibles sur la machine :

> show dbs
admin    0.000GB
local    0.000GB
test     0.000GB
On se connecte à une base:
use local
switched to db local

On peut également se connecter directement sur une base depuis la ligne de commande du shell:

mongo local

On demande la liste des "collections" :

> show collections
startup_log

Et pour voir ce qu'il y a dans la collection

> db.startup_log.find()
{ "_id" : "CIEYY2X3-1498660682291", "hostname" : "MOIICI", "startTime" : ISODate("2017-06-28T14:38:02Z"), "startTimeLocal" : "Wed Jun 28 16:38:02.291", "cmdLine" : { "command" : [ "run" ], "config" : "/etc/mongod.c
...

Requetes

Les requêtes par l'interface CLI ne donne que les 20 premières lignes correspondant a une recherche. On peur avoir les 20 suivantes en tapant la commande :

it

Cette pagination peut être modifiée par :

DBQuery.shellBatchSize = 300

On 300 est la nouvelle taille de la page.

Pour le reste, c'est la commande find() justement qui permets les requetes.

La syntaxe est :

db.<collection>.find([requete[,projection[,options]]])

On a vu plus haut que find() tout seul ou find ({}) nous donne toute la collection.

La projection

Le champ "projection" nous permet de n'avoir que certains enregistrements (documents je crois dans la terminologie mongo).

db.startup_log.find({},{hostname: 1})
{ "_id" : "MOIICI-1498660682291", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1505738260720", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1505739534853", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1507630877562", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1509110924292", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1515085243005", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1520257345819", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1520257685096", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1523608951012", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1526479636962", "hostname" : "MOIICI" }
{ "_id" : "MOIICI-1570444658931", "hostname" : "MOIICI" }

On a bien que le champ "hostname" affiché. (_id est affiché par défaut). On peut le retirer explicitement avec "_id": 0

db.startup_log.find({},{_id: 0,hostname: 1})
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }
{ "hostname" : "MOIICI" }

Le champ "projection" est un peu les champs mis dans le "select" d'une requête SQL. (on choisit les colonnes)

La requête (where clause)

Dans ce cas on demande seulement les lignes (documents) qui correspondent a certains critères (on choisit les lignes).

Si je ne veux que la ligne dont _id est "MOIICI-1570444658931" et que je ne veuille afficher que le "startTime" et l'adresse IP de binding cmdLine.net.bindIp :

db.startup_log.find({_id:"CIEYY2X3-1570444658931"},{startTime: 1, "cmdLine.net.bindIp": 1})
{ "_id" : "CIEYY2X3-1570444658931", "startTime" : ISODate("2019-10-07T10:37:38Z"), "cmdLine" : { "net" : { "bindIp" : "127.0.0.1" } } }

Les options

Plus tard