复合索引

时间:2016-06-10 22:04:00

标签: mongodb 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字节,还是其他一些组合?也就是说,对于复合索引,它如何确定密钥长度超过1024字节限制?

1 个答案:

答案 0 :(得分:2)

  

索引条目的总大小(可能包括取决于BSON类型的结构开销)必须小于1024字节。

如果我们在f1上有复合指数,f2,f3 - > fi + f2 + f3 +结构开销< 1024

more here