我希望将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
这是否意味着文档的email
和meta
字段组合的长度超过1024字节?或者每个字段是1024字节,还是其他一些组合?也就是说,对于复合索引,它如何确定密钥长度超过1024字节限制?
答案 0 :(得分:2)
索引条目的总大小(可能包括取决于BSON类型的结构开销)必须小于1024字节。
如果我们在f1上有复合指数,f2,f3 - > fi + f2 + f3 +结构开销< 1024