Mongodb 为什么shardCollection命令在mongo shell脚本中不起作用

Mongodb 为什么shardCollection命令在mongo shell脚本中不起作用,mongodb,sharding,mongo-shell,Mongodb,Sharding,Mongo Shell,我试图在mongo shell脚本中执行以下命令: sh.shardCollection('mydb.collection', { shardKey : 1 }); 但它没有任何作用 但是,当我从脚本执行时: print(sh.help()) 我得到了所有的帮助选项 这意味着“sh”变量在mongo shell脚本中也可用 那为什么我不能通过mongo shell脚本执行shardCollection呢 编辑:谢谢尼尔的评论。。这是我的mongo shell脚本 db = connect("

我试图在mongo shell脚本中执行以下命令:

sh.shardCollection('mydb.collection', { shardKey : 1 });
但它没有任何作用

但是,当我从脚本执行时:

print(sh.help())
我得到了所有的帮助选项

这意味着“sh”变量在mongo shell脚本中也可用

那为什么我不能通过mongo shell脚本执行shardCollection呢

编辑:谢谢尼尔的评论。。这是我的mongo shell脚本

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的文档保存在一个shard上

现在当我去mongo shell跑的时候

db.printShardingStatus()
我得到的输出是

{  "_id" : "mydb",  "partitioned" : false,  "primary" : "shard0000" }
这里没有列出任何集合的切分。
表示
sh.shardCollection
不工作。

您使用的命令不正确。正确的用法是传递
sh.shardCollection()
数据库和集合的名称以及描述shard键的文档。例如:

sh.shardCollection("myDatabaseName.MyCollectionName", {"myshardkey":1})
将名称空间命名为数据库名称和集合名称的组合,并用句点分隔。shardkey文档应该是要用作碎片密钥的集合中的密钥。如果您想对shard键进行散列,可以使用
{“myshardkey”:“hashed”}

请注意,您的脚本无法按设计工作。为了切分您的集合,您需要传入所需的切分键,而这通常不是一个循环遍历所有集合的脚本能够自动确定的。有时它将是“_id”,但有时它将是另一个字段或字段组-这取决于您选择使用什么作为键

我强烈要求你们通读切分的内容——做好切分并不是一个简单的过程


阅读并找出您在这里明显做错的地方。我正在做与文档中提供的相同的事情。你能指出我做错了什么吗?首先,什么是“沙德基”?不要从你想要答案的问题中抽象出来。显示示例文档,显示实际命令,显示实际错误。在目前的1200名代表中,你现在应该知道这一点,但没有做任何合理需要的事情。我已经更新了我的问题。我将我的命令与文档相匹配。我没发现有什么不同。我仍然找不到脚本不能用于command
sh.shardCollection
的原因。