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/

Premiers pas avec MongoDB
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.collection.totalIndexSize

db.collection.getIndexStats

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

Création et requêtes
// utiliser une base de données : elle devient la base courante pour les opération suivantes use university

//lister les index de la collection persons db.persons.getIndexes

// création d'un index sur lastname pour les requêtes de type // * db.persons.find( { lastname: "Donsez" } ) // * db.persons.find.sort( { lastname: 1 } )

db.persons.ensureIndex( { lastname: 1 } )

db.persons.getIndexes

db.persons.findAll

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

db.persons.findAll;

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

db.persons.findAll;

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

db.persons.findAll

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

// rechercher un objet db.persons.findOne

// sortie triée sur le nom db.persons.find.sort( { lastname: 1 } )

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

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

var p = db.persons.find while ( p.hasNext ) printjson( p.next.lastname )

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

exit

./bin/mongostat

Utilisation de l'interface RESTFul

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

http://127.0.0.1:28017/university/persons

curl -GET http://127.0.0.1:28017/university/persons

Utilisation avec Node.js et Mongoose
Voir Mongoose

Utilisation avec Node-RED


Il existe dans Node-RED un noeud pour sauvegarder les messages (json) transformés par un flow dans une base MongoDB. Le serveur mongod doit être préalablement démarré.

=Replication= http://docs.mongodb.org/manual/replication/

=Sharding= http://docs.mongodb.org/manual/core/sharding-introduction/