Един добър начин да определите как да използвате команда на обвивката на MongoDB е да въведете командата без скоби в обвивката и вместо да стартирате, тя ще отпечата изходния код за командата. Така че, ако стартирате
ShardingTest
в командния ред ще видите целия изходен код. Около ред 30 ще видите този коментар:
// Allow specifying options like :
// { mongos : [ { noprealloc : "" } ], config : [ { smallfiles : "" } ], shards : { rs : true, d : true } }
което ви дава правилния синтаксис за предаване на конфигурационни параметри за mongos, config и shards (които се отнасят за нерепликираните mongods за всички shards). Тоест, вместо да посочите номер за фрагменти, вие подавате в обект. По-нататъшно копаене в кода:
else if( isObject( numShards ) ){
tempCount = 0;
for( var i in numShards ) {
otherParams[ i ] = numShards[i];
tempCount++;
}
numShards = tempCount;
Това ще вземе обект и ще използва поддокументите в обекта като опционални параметри за всеки шард. Това води до, използвайки вашия пример:
cluster = new ShardingTest({shards : {d0:{smallfiles:''}, d1:{smallfiles:''}, d2:{smallfiles:''}}})
което от изхода виждам, че стартира фрагментите с --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
Като алтернатива, тъй като сега имате изходния код пред себе си, можете да промените javascript да предава малки файлове по подразбиране.