私はmongoシェルスクリプト内で次のコマンドを実行しようとしています:
sh.shardCollection('mydb.collection', { shardKey : 1 });
しかし、それは何もしません。
ただし、スクリプトから実行すると:
print(sh.help())
すべてのヘルプ オプションが表示されます。
つまり、'sh' 変数は mongo シェル スクリプトでも使用できることを意味します。
それでは、mongo シェル スクリプトを使用して shardCollection を実行できないのはなぜですか?
編集:ニールのコメントに感謝..これが私のモンゴシェルスクリプトです
db = connect("mydb");
print(db.help());
var cols = db.getCollectionNames();
var names = [
'a',
'b',
'c'
];
var forEachCol = function(i){
if(i === cols.length) return print('Sharding on collections Succesfull');
if(names.indexOf(cols[i]) !== -1) {
sh.shardCollection(cols[i], { shardKey : 1 });
}
forEachCol(i+1);
};
forEachCol(0);
各コレクション内の各ドキュメントにa,b,c
は、フィールド「shardKey」(インデックス付き) があります。したがって、「shardKey」は、特定の shardKey を持つドキュメントを 1 つのシャードに保持するのに役立ちます。
今、mongoシェルに行って実行すると
db.printShardingStatus()
出力は次のようになります
{ "_id" : "mydb", "partitioned" : false, "primary" : "shard0000" }
ここにリストされていないコレクションのシャーディング。機能していないことを意味しsh.shardCollection
ます。