0

私は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ます。

4

1 に答える 1