Een goede manier om te bepalen hoe een MongoDB-shellopdracht moet worden gebruikt, is door de opdracht zonder de haakjes in de shell te typen en in plaats van uit te voeren, wordt de broncode voor de opdracht afgedrukt. Dus als je
ShardingTest
bij de opdrachtprompt ziet u alle broncode. Rond regel 30 zie je deze opmerking:
// Allow specifying options like :
// { mongos : [ { noprealloc : "" } ], config : [ { smallfiles : "" } ], shards : { rs : true, d : true } }
die u de juiste syntaxis geeft om configuratieparameters door te geven voor mongo's, configuratie en shards (die van toepassing zijn op de niet-replicaset-mongoden voor alle shards). Dat wil zeggen, in plaats van een nummer op te geven voor shards die u in een object doorgeeft. Verder graven in de code:
else if( isObject( numShards ) ){
tempCount = 0;
for( var i in numShards ) {
otherParams[ i ] = numShards[i];
tempCount++;
}
numShards = tempCount;
Dit neemt een object en gebruikt de subdocumenten binnen het object als optieparameters voor elke shard. Dit leidt tot, met uw voorbeeld:
cluster = new ShardingTest({shards : {d0:{smallfiles:''}, d1:{smallfiles:''}, d2:{smallfiles:''}}})
waarvan ik uit de uitvoer kan zien dat de scherven beginnen met --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
Als alternatief, aangezien je nu de broncode voor je hebt, zou je het javascript kunnen aanpassen om standaard kleine bestanden door te geven.