shardcollection 与现有文档 mongodb

shardcollection with existing document mongodb

假设我有一个名为 "History" 和 "Employees" 的集合,上面会有一个文档。

当我使用

创建第一个集合时
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"}) 为 Employees 添加一些索引 它有效。但是当我再次尝试 shardCollection 时,它仍然 return 那个错误。

我该怎么办?

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

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

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

应该替换为

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

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