翻译或纠错本页面
片键索引¶
所有的分片集合都 必须 建立以片键为前缀的索引,如果你对一个没有任何数据的集合分片,并且这个集合没有需要的索引, shardCollection 命令会自己创建需要的索引,如果你的集合已经有了数据,在使用 shardCollection 之前必须先建立相应的索引.
在 2.2 版更改: 片键所需要的索引不一定是只包含片键,还可以是以片键为前缀的 compound index .
重要
片键上的索引 不能 是 多键索引.
一个分片过的集合 people 以 zipcode 为片键,且现在已经有了索引 { zipcode: 1 } ,按照如下步骤可以将此索引用 { zipcode: 1, username: 1 } 替换.
创建一个 { zipcode: 1, username: 1 } 的索引:
db.people.ensureIndex( { zipcode: 1, username: 1 } );
当MongoDB创建这个新索引完成后,可以安全地删除 { zipcode: 1 } 索引:
db.people.dropIndex( { zipcode: 1 } );
由于片键上的索引不能是多键索引,只有在 username 字段没有数组的情况下, { zipcode: 1, username: 1 } 才可以替换索引 { zipcode: 1 } .
如果你删除了对片键来说最后一个有效的索引,可以通过建立片键的索引进行恢复.
参见 Shard Key Limitations 以获得更多关于片键索引的限制.