MongoDB

SBGD NoSQL
 * écrit en C++
 * tolérance aux pannes par réplication (replicat set)
 * passage à l'échelle (horizontal scaling) en distribuant une base de données entre plusieurs processus mongod (sharding, guide)
 * shell Javascript (plus ...)
 * stockage native des objets JSON
 * support de persistance pour les programmes Node.js (plus ... et Mongoose)

Liens:
 * http://www.mongodb.org/
 * DZone's MongoDB refcard
 * Correspondances avec SQL http://docs.mongodb.org/manual/reference/sql-comparison/

Exemples de lignes de commande Shell
Lancez le serveur ./bin/mongod --rest --dbpath ./data/db

""Remarque"" : en production, ajoutez les options ./bin/mongod --nohttpinterface --bing_ip --auth --logappend ... --dbpath ./data/db

Ouvrez les pages d'administration via le serveur HTTP et l'interface REST
 * http://localhost:28017/
 * http://localhost:28017/_commands
 * http://127.0.0.1:28017/_replSet

Lancez le shell ./bin/mongo

Quelques commandes d'administration

// Quelques commandes d'administration help

db.help

db.version

db.stats

db.serverStatus

db.currentOp

db.killOp(1234)

prompt=function { return (new Date)+"$ "; }

db.getLastError

// db.serverCmdLinesOpts n'existe plus

db.shutdownServer

Relancez le serveur mongod

//	show dbs                    show database names show dbs

//	show collections            show collections in current database show collections

//	show users                  show users in current database show users

//	show profile                show most recent system.profile entries with time >= 1ms show profile

//	show logs                   show the accessible logger names show logs

//	show log [name]             prints out the last segment of log in memor show log global

use test

db.test.getIndexes

db.test.findAll;

// ajout d'un objet db.test.save( {   firstname : "Didier",    lastname : "Donsez",    job : "Professor",    skill : ["SE","OSGi"], } )

db.test.findAll;

// ajout d'un objet db.test.save( {   firstname : "Olivier",    lastname : "Richard",    job : "Professor",    skill : ["Network","Grid"],    hobbies: ["3D printing", "DIY"], } )

db.test.findAll;

// ajout d'un objet db.test.save( {   firstname : "Nicolas",    lastname : "Palix",    job : "Professor",    skill : ["OS","Phycomp"],    address: "Saint Martin d'Hères", } )

db.test.findAll;

// rechercher 2 objets db.test.find.limit(2)

// rechercher un objet db.test.findOne

// rechercher les objets dont le champ firstname = "Didier" db.test.find( { firstname : "Didier" } )

// rechercher les objets dont le champ hobbies n'est pas null db.test.find( { hobbies : { $ne : null } } )

// script de modification des champs "address" db.test.find( { address: {$ne : null}}).forEach(    function update(e) {        var address = e.address;        e.address = new Object;        e.address.way = address;        e.address.city = "";        db.test.save(e);    } )

exit

./bin/mongostat

Utilisation de l'interface RESTFul

 * http://docs.mongodb.org/ecosystem/tools/http-interfaces/

http://127.0.0.1:28017/test/test

curl -GET http://127.0.0.1:28017/test/test

Utilisation avec Node.js et Mongoose
Voir Mongoose

Utilisation avec Node-RED
TODO