26mai 2011
MongoDB c'est cool
16:12 - Par Fabien Poulard - Geek & Technique
Je suis récemment tombé amoureux de la base de données MongoDB. Ses avantages sont nombreux mais j'apprécie tout particulièrement l'absence de schéma et le shell. L'absence de schéma permet d'insérer des structures de données différentes dans les collections ou de modifier les structures existantes de manière transparentes sans impact sur les autres entrées (bye bye ALTER). Le shell quant à lui offre une réelle souplesse qui permet de réaliser des opérations complexes qui auraient nécessiter l'écriture de code sur des bases SQL.
Le shell est en réalité un interpréteur JavaScript, Petit exemple de la puissance de celui-ci. Dans le cadre d'un projet je voulais extraire un sous-ensemble stratifié d'un corpus stocké dans MongoDB. La stratification doit s'opérer sur un attribut nommé nivabr qui prend un certain nombre de valeurs. Je souhaitais avoir une dizaine de documents pour chacune de ces valeurs.
Voici le code qui m'a permis de créer la nouvelle collection contenant le sous-ensemble stratifié de mon corpus :
var strata = db.nano.distinct("nivabr"); insertInColl = function (entry) { db.subostnano.insert(entry); } selectStratum = function (stratename) { db.nano.find({nivabr: {$in: [stratename], $size: 1}}).limit(10).forEach(insertInColl); } strata.forEach(selectStratum);
Et ça fonctionne :
> db.subostnano.find().count() 100
Par contre je ne suis pas (encore) un maître du shell Mongo (ou Monja). Vous voyez une meilleure approche pour mon problème ? J'aimerais notamment que la sélection au sein des strates se fasse aléatoirement, ce qui n'est pas le cas ici.