Un bon moyen de déterminer comment utiliser une commande shell MongoDB est de taper la commande sans les parenthèses dans le shell et au lieu de l'exécuter, il imprimera le code source de la commande. Donc, si vous exécutez
ShardingTest
à l'invite de commande, vous verrez tout le code source. Vers la ligne 30, vous verrez ce commentaire :
// Allow specifying options like :
// { mongos : [ { noprealloc : "" } ], config : [ { smallfiles : "" } ], shards : { rs : true, d : true } }
qui vous donne la syntaxe correcte pour passer les paramètres de configuration pour les mongos, config et shards (qui s'appliquent aux mongods non replicaset pour tous les shards). Autrement dit, au lieu de spécifier un nombre pour les fragments que vous transmettez dans un objet. Creuser plus loin dans le code :
else if( isObject( numShards ) ){
tempCount = 0;
for( var i in numShards ) {
otherParams[ i ] = numShards[i];
tempCount++;
}
numShards = tempCount;
Cela prendra un objet et utilisera les sous-documents dans l'objet comme paramètres d'option pour chaque fragment. Cela conduit à, en utilisant votre exemple :
cluster = new ShardingTest({shards : {d0:{smallfiles:''}, d1:{smallfiles:''}, d2:{smallfiles:''}}})
qui, d'après la sortie que je peux voir, démarre les partitions avec --smallfiles :
shell: started program mongod --port 30000 --dbpath /data/db/test0 --smallfiles --setParameter enableTestCommands=1
shell: started program mongod --port 30001 --dbpath /data/db/test1 --smallfiles --setParameter enableTestCommands=1
shell: started program mongod --port 30002 --dbpath /data/db/test2 --smallfiles --setParameter enableTestCommands=1
Alternativement, puisque vous avez maintenant le code source devant vous, vous pouvez modifier le javascript pour passer les petits fichiers par défaut.