OPTIONS
翻译或纠错本页面

片键索引

所有的分片集合都 必须 建立以片键为前缀的索引,如果你对一个没有任何数据的集合分片,并且这个集合没有需要的索引, shardCollection 命令会自己创建需要的索引,如果你的集合已经有了数据,在使用 shardCollection 之前必须先建立相应的索引.

在 2.2 版更改: 片键所需要的索引不一定是只包含片键,还可以是以片键为前缀的 compound index .

重要

片键上的索引 不能多键索引.

一个分片过的集合 peoplezipcode 为片键,且现在已经有了索引 { zipcode: 1 } ,按照如下步骤可以将此索引用 { zipcode: 1, username: 1 } 替换.

  1. 创建一个 { zipcode: 1, username: 1 } 的索引:

    db.people.ensureIndex( { zipcode: 1, username: 1 } );
    
  2. 当MongoDB创建这个新索引完成后,可以安全地删除 { zipcode: 1 } 索引:

    db.people.dropIndex( { zipcode: 1 } );
    

由于片键上的索引不能是多键索引,只有在 username 字段没有数组的情况下, { zipcode: 1, username: 1 } 才可以替换索引 { zipcode: 1 } .

如果你删除了对片键来说最后一个有效的索引,可以通过建立片键的索引进行恢复.

参见 Shard Key Limitations 以获得更多关于片键索引的限制.

ON THIS PAGE