Le lien suivant détaille l'installation de MongoDB, ainsi que le driver PHP permettant de requêter en direct à partir de code PHP.
http://fv.cruxaustralis.net/languages/php/installing-mongodb-and-the-php-driver-in-ubuntu-10-10/
Passons maintenant à l'utilisation de MongoDB
http://www.mongodb.org/display/DOCS/Tutorial
1) une fois sur un shell, on tape "mango" et on arrive dans l'invite de requêtage.
use biloute
réponse: switched to db "biloute"
En effet, MongoDB crée bases de données et collections à la volée.
En fait il ne les crée réellement que lorsqu'on y ajoute des données. tant qu'il n'y a pas de donnée,
la commande "show dbs" ne montrera pas la base de donnée en question
si l'on requête une collection qui n'existe pas, mongo la traite comme une collection vide.
Une fois créés et avec une donnée au moins à l'intérieur, les bases de données et tables (collections) ainsi que les index sont créés dans une collection appelée "systems"
--> db.systems.collections et db.systems.indexes
Les collections contiennent des documents JSON qui contiennent des "champs".
En MongoDB il n'y a pas de prédéfinition de champs, il n'y a pas de schémas pour les champs d'une collection. Les champs et leurs valeurs peuvent varier.
Il n'y aura donc jamais de requête comme "alter table" pour rajouter un champ.
En pratique on essaye de garder une structure identique des documents compris dans une collection, mais ce n'est pas une obligation.
==> note : celà facilite grandement la migration des schémas de base de données entre les versions. pas besoin de prévoir des scripts de migrations de tables compliqués avec des "alter tables...." partout.
==> celà facilite aussi le développement de logiciel de manière itérative, car la base de donnée était auparavant un réel frein aux méthodes agiles, car celà obligeait un vrai travail d'architecture de base de données en amont.
En fait, find() retrouve ce que l'on appelle un objet "curseur", qui renvoie le premier set de résultats, puis nous laisse continuer à itérer avec la commande "it", a moins de travailler directement avec le curseur.
il est aussi possible de chercher le quatrième enregistrement comme suit:
Il existe plusieurs autres façons de permettre le requêtage sous MongoDB.
----
Conepts derrière mongodb:
les bases de données sont enregistrées de façon indépendantes et contiennent des paramètres de sécurité pour en controler l'accès.
Les collections sont des groupes de documents avec le même nom. L'équivalent des tables en rdb.
Leur schéma est dynamique et ils ne contiennent pas nécéssairement des documents de même structure.
Collections peuvent être organisées en "namespaces" comme des Classes, par exemple:
blog.posts, blog.authors
On peut avoir plusieurs collections, surtout si l'on a généralement pas besoin de requêter différents éléments dans plusieurs logs au même moment (ex des logs, on va requeter soit le log de dev, soit le log de débuggage, rarement les deux au même instant)
ex: logs.dev logs.debug ...
http://fv.cruxaustralis.net/languages/php/installing-mongodb-and-the-php-driver-in-ubuntu-10-10/
Passons maintenant à l'utilisation de MongoDB
http://www.mongodb.org/display/DOCS/Tutorial
1) une fois sur un shell, on tape "mango" et on arrive dans l'invite de requêtage.
use biloute
réponse: switched to db "biloute"
En effet, MongoDB crée bases de données et collections à la volée.
En fait il ne les crée réellement que lorsqu'on y ajoute des données. tant qu'il n'y a pas de donnée,
la commande "show dbs" ne montrera pas la base de donnée en question
si l'on requête une collection qui n'existe pas, mongo la traite comme une collection vide.
Une fois créés et avec une donnée au moins à l'intérieur, les bases de données et tables (collections) ainsi que les index sont créés dans une collection appelée "systems"
--> db.systems.collections et db.systems.indexes
Les collections contiennent des documents JSON qui contiennent des "champs".
En MongoDB il n'y a pas de prédéfinition de champs, il n'y a pas de schémas pour les champs d'une collection. Les champs et leurs valeurs peuvent varier.
Il n'y aura donc jamais de requête comme "alter table" pour rajouter un champ.
En pratique on essaye de garder une structure identique des documents compris dans une collection, mais ce n'est pas une obligation.
==> note : celà facilite grandement la migration des schémas de base de données entre les versions. pas besoin de prévoir des scripts de migrations de tables compliqués avec des "alter tables...." partout.
==> celà facilite aussi le développement de logiciel de manière itérative, car la base de donnée était auparavant un réel frein aux méthodes agiles, car celà obligeait un vrai travail d'architecture de base de données en amont.
db.things.save({x : 4, j : i}); insère un document js avec les "champs x et j"
db.things.find(); retrouve tous les documents enregistrés dans la collection "things"
En fait, find() retrouve ce que l'on appelle un objet "curseur", qui renvoie le premier set de résultats, puis nous laisse continuer à itérer avec la commande "it", a moins de travailler directement avec le curseur.
while (cursor.hasNext()) printjson(cursor.next());
il est aussi possible de chercher le quatrième enregistrement comme suit:
ar cursor = db.things.find(); > printjson(cursor[4]); { "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }Attention car lorsque les curseurs sont utilisés de cette facon, toutes les données avant l'enregistrement numéro 4 sont stockés en RAM, ce qui peut vite la saturer dans le cas d'enregistrement nombreux.
Il existe plusieurs autres façons de permettre le requêtage sous MongoDB.
----
Conepts derrière mongodb:
les bases de données sont enregistrées de façon indépendantes et contiennent des paramètres de sécurité pour en controler l'accès.
Les collections sont des groupes de documents avec le même nom. L'équivalent des tables en rdb.
Leur schéma est dynamique et ils ne contiennent pas nécéssairement des documents de même structure.
Collections peuvent être organisées en "namespaces" comme des Classes, par exemple:
blog.posts, blog.authors
On peut avoir plusieurs collections, surtout si l'on a généralement pas besoin de requêter différents éléments dans plusieurs logs au même moment (ex des logs, on va requeter soit le log de dev, soit le log de débuggage, rarement les deux au même instant)
ex: logs.dev logs.debug ...
Commentaires
Enregistrer un commentaire
Tell me what you think