Installer la base de données[Téléchargez] la base de données, décompressez la et démarrez le démon mongd : $ bin/mongod Récupérer une connexion à la base de donnéesEssayons maintenant de manipuler la base à partir du shell (Nous pourrions effectuer les mêmes opérations à partir de n'importe quel langage de développement en utilisant le driver approprié. Le shell est cependant plus pratique pour une utilisation interactive). $ bin/mongo (Par défaut le shell se connecte à une base implicite sur l'hôte local). Vous devriez voir : MongoDB shell version: 0.9.8 url: test connecting to: test type "help" for help > "connecting to:" donne le nom de la base utilisée par le shell. Pour basculer sur une autre base, tapez : > use mydb
Insérer des données dans une collectionCréons une collection test et insérons des données. Nous allons créer 2 objets j et t, et allons les sauver dans la collection things. > j = { name: "mongo"};
{"name" : "mongo"}
> t = { x : 3 };
{ "x" : 3 }
> db.things.save(j);
> db.things.save(t);
> db.things.find();
in cursor for : DBQuery: example.things ->
{"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"}
{"x" : 3 , "_id" : "497cf61651712cf7758fbdbc"}
>
Ajoutons quelques enregistrements supplémentaires dans cette collection : > for( var i = 1; i < 10; i++ ) db.things.save( { x:4, j:i } ); > db.things.find(); in cursor for : DBQuery: example.things -> {"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"} {"x" : 3 , "_id" : "497cf61651712cf7758fbdbc"} {"x" : 4 , "j" : 1 , "_id" : "497cf87151712cf7758fbdbd"} {"x" : 4 , "j" : 2 , "_id" : "497cf87151712cf7758fbdbe"} {"x" : 4 , "j" : 3 , "_id" : "497cf87151712cf7758fbdbf"} {"x" : 4 , "j" : 4 , "_id" : "497cf87151712cf7758fbdc0"} {"x" : 4 , "j" : 5 , "_id" : "497cf87151712cf7758fbdc1"} {"x" : 4 , "j" : 6 , "_id" : "497cf87151712cf7758fbdc2"} {"x" : 4 , "j" : 7 , "_id" : "497cf87151712cf7758fbdc3"} {"x" : 4 , "j" : 8 , "_id" : "497cf87151712cf7758fbdc4"} has more Notez que tous les documents ne sont pas affichés – le shell en limite le nombre à 10 quand il parcourt un curseur. Etant donné que nous avons déjà 2 documents dans la collection, nous voyons seulement les 8 premiers éléments nouvellement insérés.
{"x" : 4 , "j" : 7 , "_id" : "497cf87151712cf7758fbdc3"}
{"x" : 4 , "j" : 8 , "_id" : "497cf87151712cf7758fbdc4"}
has more
> it
{"x" : 4 , "j" : 9 , "_id" : "497cf87151712cf7758fbdc5"}
{"x" : 4 , "j" : 10 , "_id" : "497cf87151712cf7758fbdc6"}
Techniquement, find() retourne un objet de type curseur. Cependant dans les précédents cas, nous n'avons affecté ce curseur à aucune variable. De ce fait, le shell parcourt automatiquement le curseur, nous présentant les premiers résultats et nous offrant la possibiltié de continuer l'itération à l'aide de la commande it. Mais il est possible de travailler directement avec le curseur, comme cela est présenté dans la prochaine section. Accéder aux données à partir d'une requêteAvant d'aborder plus en detail le sujet des requêtes, nous allons présenter la manière de travailler avec le résultat d'une requête – l'objet curseur. Nous utiliserons la méthode find() qui retourne tout le contenu d'une collection, et parlerons de la manière de créer des requêtes spécifiques plus tard. > var cursor = db.things.find(); > while (cursor.hasNext()) { print(tojson(cursor.next())); } {"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"} {"x" : 3 , "_id" : "497cf61651712cf7758fbdbc"} {"x" : 4 , "j" : 1 , "_id" : "497cf87151712cf7758fbdbd"} {"x" : 4 , "j" : 2 , "_id" : "497cf87151712cf7758fbdbe"} {"x" : 4 , "j" : 3 , "_id" : "497cf87151712cf7758fbdbf"} {"x" : 4 , "j" : 4 , "_id" : "497cf87151712cf7758fbdc0"} {"x" : 4 , "j" : 5 , "_id" : "497cf87151712cf7758fbdc1"} {"x" : 4 , "j" : 6 , "_id" : "497cf87151712cf7758fbdc2"} {"x" : 4 , "j" : 7 , "_id" : "497cf87151712cf7758fbdc3"} {"x" : 4 , "j" : 8 , "_id" : "497cf87151712cf7758fbdc4"} {"x" : 4 , "j" : 9 , "_id" : "497cf87151712cf7758fbdc5"} > Le code précédent montre une itération utilisant un curseur. La méthode hasNext() permet de savoir si il y a d'autres documents à retourner, et la méthode next() retourne le prochain document. Nous utilisons également la méthode interne tojson() permettant d'afficher le résultat dans un format JSON plus agréable à lire. > db.things.find().forEach( function(x) { print(tojson(x));});
{"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"}
{"x" : 3 , "_id" : "497cf61651712cf7758fbdbc"}
{"x" : 4 , "j" : 1 , "_id" : "497cf87151712cf7758fbdbd"}
{"x" : 4 , "j" : 2 , "_id" : "497cf87151712cf7758fbdbe"}
{"x" : 4 , "j" : 3 , "_id" : "497cf87151712cf7758fbdbf"}
{"x" : 4 , "j" : 4 , "_id" : "497cf87151712cf7758fbdc0"}
{"x" : 4 , "j" : 5 , "_id" : "497cf87151712cf7758fbdc1"}
{"x" : 4 , "j" : 6 , "_id" : "497cf87151712cf7758fbdc2"}
{"x" : 4 , "j" : 7 , "_id" : "497cf87151712cf7758fbdc3"}
{"x" : 4 , "j" : 8 , "_id" : "497cf87151712cf7758fbdc4"}
{"x" : 4 , "j" : 9 , "_id" : "497cf87151712cf7758fbdc5"}
>
L'utilisation de forEach() impose la definition d'une function qui est appelée pour chaque document retourné par le curseur. > var cursor = db.things.find(); > print (tojson(cursor[4])); {"x" : 4 , "j" : 3 , "_id" : "497cf87151712cf7758fbdbf"} Lorsque vous utilisez un curseur de cette façon, tous les éléments jusqu'à l'index accédé (cursor[4] dans notre exemple) sont montés en mémoire. C'est inapproprié pour de larges resultsets qui risquent de saturer la mémoire. Les curseurs doivent être utilisés dès lors que les requêtes retournent un nombre élevé d'éléments. > var arr = db.things.find().toArray(); > arr[5]; {"x" : 4 , "j" : 4 , "_id" : "497cf87151712cf7758fbdc0"} Toutefois cette possibilité est spécifique au [shell mongo], et n'est pas porposée par tous les drivers. Paramétrer le résultat des requêtesMaintenant que nous savons comment manipuler les curseurs, regardons de près comment paramétrer les requêtes pour retourner des données spécifiques. SELECT * FROM things WHERE name="mongo" > db.things.find({name:"mongo"}).forEach(function(x) { print(tojson(x));});
{"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"}
>
SELECT * FROM things WHERE x=4 > db.things.find({x:4}).forEach(function(x) { print(tojson(x));});
{"x" : 4 , "j" : 1 , "_id" : "497cf87151712cf7758fbdbd"}
{"x" : 4 , "j" : 2 , "_id" : "497cf87151712cf7758fbdbe"}
{"x" : 4 , "j" : 3 , "_id" : "497cf87151712cf7758fbdbf"}
{"x" : 4 , "j" : 4 , "_id" : "497cf87151712cf7758fbdc0"}
{"x" : 4 , "j" : 5 , "_id" : "497cf87151712cf7758fbdc1"}
{"x" : 4 , "j" : 6 , "_id" : "497cf87151712cf7758fbdc2"}
{"x" : 4 , "j" : 7 , "_id" : "497cf87151712cf7758fbdc3"}
{"x" : 4 , "j" : 8 , "_id" : "497cf87151712cf7758fbdc4"}
{"x" : 4 , "j" : 9 , "_id" : "497cf87151712cf7758fbdc5"}
>
SELECT j FROM things WHERE x=4 > db.things.find({x:4}, {j:true}).forEach(function(x) { print(tojson(x));});
{"j" : 1 , "_id" : "497cf87151712cf7758fbdbd"}
{"j" : 2 , "_id" : "497cf87151712cf7758fbdbe"}
{"j" : 3 , "_id" : "497cf87151712cf7758fbdbf"}
{"j" : 4 , "_id" : "497cf87151712cf7758fbdc0"}
{"j" : 5 , "_id" : "497cf87151712cf7758fbdc1"}
{"j" : 6 , "_id" : "497cf87151712cf7758fbdc2"}
{"j" : 7 , "_id" : "497cf87151712cf7758fbdc3"}
{"j" : 8 , "_id" : "497cf87151712cf7758fbdc4"}
{"j" : 9 , "_id" : "497cf87151712cf7758fbdc5"}
>
Notez que le champ "_id" est systématiquement retourné. findOne()Le [shell mongo] vous permet d'éviter la gestion d'un curseur pour récupérer un seul enregistrement en utilisant la fonction findOne(). Cette méthode prend les mêmes paramètres que la fonction find() et ne retourne que le premier document correspondant à la requête, ou null si aucun document ne répond aux critères. > var mongo = db.things.findOne({name:"mongo"}); > print(tojson(mongo)); {"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"} > Cette méthode est particulièrement efficace puisque le client ne récupère qu'un objet de la base, donc permet de minimiser le travail de la base et le traffic réseau. C'est l'équivalent de l'appel find({name:"mongo"}).limit(1). Limiter la taille du résultat via limit()Vous pouvez limiter le nombre de résultats retournés par une requête en utilisant la méthode limit(). > db.things.find().limit(3); in cursor for : DBQuery: example.things -> {"name" : "mongo" , "_id" : "497cf60751712cf7758fbdbb"} {"x" : 3 , "_id" : "497cf61651712cf7758fbdbc"} {"x" : 4 , "j" : 1 , "_id" : "497cf87151712cf7758fbdbd"} > What NextLa prochaine étape après la lecture de ce tutoriel est de parcourir le manuel pour entrer dans les détails. |
