【发布时间】:2014-09-13 08:55:18
【问题描述】:
我正在尝试在 mongo shell 脚本中执行以下命令:
sh.shardCollection('mydb.collection', { shardKey : 1 });
但它什么也没做。
但是当我从脚本执行时:
print(sh.help())
我得到了所有的帮助选项。
所以意味着 'sh' 变量也可以在 mongo shell 脚本中使用。
那为什么我不能通过 mongo shell 脚本执行 shardCollection?
编辑:感谢 neil 的 cmets.. 这是我的 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 的文档保存在一个分片上。
现在当我去 mongo shell 运行时
db.printShardingStatus()
我得到的输出为
{ "_id" : "mydb", "partitioned" : false, "primary" : "shard0000" }
这里没有列出任何集合的分片。
表示sh.shardCollection 不工作。
【问题讨论】:
-
阅读the documentation 并找出你在这里明显做错了什么。
-
我正在做与文档中提供的相同的事情。你能指出我做错了什么吗?
-
什么是初学者的“shardKey”?不要抽象出你真正想要答案的问题。显示您的示例文档,显示您的真实命令,显示您的实际错误。在当前的 1200 次代表中,您现在应该知道这一点,但没有做任何合理需要的事情。
-
我更新了我的问题。我将我的命令与文档相匹配。我没有发现任何区别。我仍然找不到我的脚本不能用于命令
sh.shardCollection的原因。
标签: mongodb sharding mongo-shell