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.