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"})
假设我有一个名为 "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"})