shardcollection与现有文档mongodb

时间:2016-12-22 10:30:17

标签: mongodb sharding

让我们说我有一个名为" History"和"员工"并且会有一份文件。

当我使用

创建第一个集合时
sh.shardCollection("Databases.History",{"email":1})

它运行正常,我在其上添加了一些文档。

但是。当我创建第二个名为" Employees"与

db.Employees.insert({"name":"Jhon Wick", "email":"jw@goodemail.com"})

并使用

在其上创建分片集合
sh.shardCollection("Databases.Employees",{"email":1})  

,它没有用。

MongoDB表示" 请在分片前创建一个以分片键开头的索引。"

所以我尝试使用db.Employees.ensureIndex({"email":"hashed"})向员工添加一些索引 它的工作原理。但是,当我再次尝试shardCollection时,它仍会返回该错误。

我该怎么办?

MongoDB是否有规则,如果我要在集合上添加shardKeys,它(集合)一开始不能存在?

1 个答案:

答案 0 :(得分:2)

您的索引策略必须与您的分片策略相同。如果已创建散列索引,则必须在分片时指定散列策略。

sh.shardCollection("Databases.Employees",{"email":1})

shoule替换为

sh.shardCollection("Databases.Employees",{"email":"hashed"})

https://docs.mongodb.com/v3.0/tutorial/shard-collection-with-a-hashed-shard-key/#shard-the-collection