Difference between revisions of "MongoDB"
Jump to navigation
Jump to search
Line 101: | Line 101: | ||
// création d'un index sur lastname pour les requêtes de type : la valeur de la clé lastname est unique |
// création d'un index sur lastname pour les requêtes de type : la valeur de la clé lastname est unique |
||
− | // * db.persons.find( { |
+ | // * db.persons.find( { pseudo: "dd" } ) |
− | // * db.persons.find().sort( { |
+ | // * db.persons.find().sort( { pseudo: 1 } ) |
− | db.persons.ensureIndex( { " |
+ | db.persons.ensureIndex( { "pseudo": 1 }, { unique: true } ) |
// d'autres options sont disponibles : background, sparse, expireAfterSeconds, dropDups |
// d'autres options sont disponibles : background, sparse, expireAfterSeconds, dropDups |
||
Line 119: | Line 119: | ||
lastname : "Donsez", |
lastname : "Donsez", |
||
job : "Professor", |
job : "Professor", |
||
− | skill : [" |
+ | skill : ["Software Engineering","OSGi","IoT"], |
hobbies: ["Laser cutter", "DIY"], |
hobbies: ["Laser cutter", "DIY"], |
||
} |
} |
||
Line 147: | Line 147: | ||
lastname : "Palix", |
lastname : "Palix", |
||
job : "Professor", |
job : "Professor", |
||
− | skill : [" |
+ | skill : ["Operating Systems","Phycomp"], |
address: "Saint Martin d'Hères", |
address: "Saint Martin d'Hères", |
||
} |
} |
||
Line 162: | Line 162: | ||
// rechercher un objet via l'index |
// rechercher un objet via l'index |
||
− | db.persons.find( { |
+ | db.persons.find( { pseudo : "dd" } ) |
− | db.persons.find( { |
+ | db.persons.find( { pseudo : "dd" } ).explain() |
// sortie triée sur le nom |
// sortie triée sur le nom |
||
− | db.persons.find().sort( { |
+ | db.persons.find().sort( { pseudo: 1 } ) |
// rechercher les objets dont le champ firstname = "Didier" |
// rechercher les objets dont le champ firstname = "Didier" |
||
Line 174: | Line 174: | ||
// rechercher les objets dont le champ hobbies n'est pas null |
// rechercher les objets dont le champ hobbies n'est pas null |
||
db.persons.find( { hobbies : { $ne : null } } ) |
db.persons.find( { hobbies : { $ne : null } } ) |
||
− | |||
var p = db.persons.find() |
var p = db.persons.find() |
Revision as of 21:27, 27 October 2014
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/
- https://mms.mongodb.com/ : cloud service that makes it easy for you to provision, monitor, backup and scale MongoDB
- https://mongolab.com/ : MongoDB-as-a-Service
Documentation
- DZone's MongoDB refcard
- Correspondances avec SQL http://docs.mongodb.org/manual/reference/sql-comparison/
- Livres https://www.mongodb.org/books
Premiers pas avec MongoDB
Lancez le serveur
./bin/mongod --rest --dbpath ./data/db
""Remarque"" : en production, ajoutez les options ./bin/mongod --nohttpinterface --bing_ip <address> --auth --logappend ... --dbpath ./data/db
Ouvrez les pages d'administration via le serveur HTTP et l'interface REST
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 : la valeur de la clé lastname est unique // * db.persons.find( { pseudo: "dd" } ) // * db.persons.find().sort( { pseudo: 1 } ) db.persons.ensureIndex( { "pseudo": 1 }, { unique: true } ) // d'autres options sont disponibles : background, sparse, expireAfterSeconds, dropDups db.persons.getIndexes() db.persons.find() // ajout d'un objet db.persons.save( { pseudo: "dd", firstname : "Didier", lastname : "Donsez", job : "Professor", skill : ["Software Engineering","OSGi","IoT"], hobbies: ["Laser cutter", "DIY"], } ) db.persons.find() // ajout d'un objet db.persons.save( { pseudo: "or", firstname : "Olivier", lastname : "Richard", job : "Professor", skill : ["Network","Grid"], hobbies: ["3D printing", "DIY"], } ) db.persons.find() // ajout d'un objet db.persons.save( { pseudo: "np", firstname : "Nicolas", lastname : "Palix", job : "Professor", skill : ["Operating Systems","Phycomp"], address: "Saint Martin d'Hères", } ) db.persons.find() // rechercher 2 objets db.persons.find().limit(2) // rechercher un objet db.persons.findOne() // rechercher un objet via l'index db.persons.find( { pseudo : "dd" } ) db.persons.find( { pseudo : "dd" } ).explain() // sortie triée sur le nom db.persons.find().sort( { pseudo: 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://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/