复合索引的键长

Key length for Compound index

我希望将 MongoDB 2.4.x 实例升级到 2.6。作为此过程的一部分,我 运行 使用 db.upgradeCheckAllDBs() 方法来确保我的数据处于升级的正确状态。此检查在我的数据库中发现了一些记录,这些记录在字段上定义了索引,但键超过了 1024 字节的限制。也就是说,我看到了以下形式的错误:

Document Error: key for index {  "v" : 1,  "name" : "field_1",  "key" : {  "field" : 1 },  "ns" : "mydb.users" } too long for document

表明该文档在 field 字段中包含一个超过 1024 字节(键的限制)的值。

这很容易解决(我可以删除 field 上的那个索引),但是复合索引呢?例如:假设我有如下索引:

Document Error: key for index {  "v" : 1,  "name" : "email_-1_meta_-1",  "key" : {  "email" : -1,  "meta" : -1 },  "ns" : "mydb.users" } too long for document

这是否意味着文档的 emailmeta 字段 组合 的长度超过 1024 字节?或者是每个字段 1024 字节,还是其他一些组合?即对于复合索引,如何判断key长度超过1024字节的限制?

The total size of an index entry, which can include structural overhead depending on the BSON type, must be less than 1024 bytes.

如果我们在 f1、f2、f3 上有复合索引 -> fi+f2+f3+结构开销 < 1024

more here