Difference between revisions of "MongoDB"

From air
Jump to navigation Jump to search
Line 147: Line 147:
 
lastname : "Palix",
 
lastname : "Palix",
 
job : "Professor",
 
job : "Professor",
skill : ["Operating Systems","Phycomp"],
+
skill : ["Operating Systems","Phycomp","Network"],
 
address: "Saint Martin d'Hères",
 
address: "Saint Martin d'Hères",
 
}
 
}
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 } } )
  +
  +
// rechercher les objets dont le champ hobbies n'existe pas
  +
db.persons.find( { hobbies : { $exists: false } } )
   
 
var p = db.persons.find()
 
var p = db.persons.find()
 
while ( p.hasNext() ) printjson( p.next().lastname )
 
while ( p.hasNext() ) printjson( p.next().lastname )
  +
  +
// agregation des skills : see http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
  +
db.persons.aggregate(
  +
[
  +
{ $unwind : "$skill" },
  +
{ $group : { _id : "$skill" , number : { $sum : 1 } } },
  +
{ $sort : { number : -1 } },
  +
{ $limit : 5 }
  +
]
  +
)
   
   

Revision as of 21:46, 27 October 2014

SBGD NoSQL

Liens

Documentation

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","Network"],
    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 } } )

// rechercher les objets dont le champ hobbies n'existe pas
db.persons.find( { hobbies : { $exists: false } } )

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

// agregation des skills : see http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
db.persons.aggregate(
  [
    { $unwind : "$skill" },
    { $group : { _id : "$skill" , number : { $sum : 1 } } },
    { $sort : { number : -1 } },
    { $limit : 5 }
  ]
)


// 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

Node RED with MQTT, OpenHAB, MongoDB, Redis.io, RabbitMQ, Moquette, Mosquitto ...

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/