Mogodb索引名称太长

时间:2019-12-25 02:49:38

标签: node.js mongodb indexing

我正在尝试在mongobd中创建索引。但是,我收到一条错误消息,指出索引名称太长(最大127个字节)

错误消息

{
        "ok" : 0,
        "errmsg" : "namespace name generated from index name \"dictionary.words.$word_text_conjugation.indicative.presente_text_conjugation.indicative.preterite_text_conjugation.indicative.imperfect_text_conjugation.indicative.conditional_text_conjugation.indicative.futuro_text_conjugation.imperativo.afirmativo_text_conjugation.imperativo.negativo_text_conjugation.subjuntivo.presente_text_conjugation.subjuntivo.imperfect_text_conjugation.subjuntivo.imperfect2_text_conjugation.subjuntivo.futuro_text_conjugation.infinitivo_text_conjugation.gerundio_text_conjugation.participio_text\" is too long (127 byte max)",
        "code" : 67,
        "codeName" : "CannotCreateIndex"
}

要存储的对象看起来像(为清楚起见,删除了未索引的字段)

let verbObject = {
    word: "comer",
    pos: {
            conjugation: {
                indicative: {
                    presente: ["como", "comes", "come", "comemos", "coméis", "comen"],
                    preterite: ["comí", "comiste", "comió", "comimos", "comisteis", "comieron"],
                    imperfect: ["comía", "comías", "comía", "comíamos", "comíais", "comían"],
                    conditional: ["comería", "comerías", "comería", "comeríamos", "comeríais", "comerían"],
                    futuro: ["comeré", "comerás", "comerá", "comeremos", "comeréis", "comerán"]
                },
                imperativo: {
                    afirmativo: ["come", "coma", "comamos", "comed", "coman"],
                    negativo: ["no comas", "no coma", "no comamos", "no comáis", "no coman"]
                },
                subjuntivo:{
                    presente: ["coma", "comas", "coma", "comamos", "comáis", "coman"],
                    imperfect: ["comiera", "comieras", "comiera", "comiéramos", "comierais", "comieran"],
                    imperfect2: ["comiese", "comieses", "comiese", "comiésemos", "comieseis", "comiesen"],
                    futuro: ["comiere", "comieres", "comiere", "comiéremos", "comiereis", "comieren"],
                },
                infinitivo: "comer",
                gerundio: "comiendo",
                participio: "comido",
            }
        },
}

根据this的回答,显而易见的解决方案是缩短索引名称。

问题

.1我不想更改名称,因为它会使读者不那么友好,我将不得不重写大量代码以匹配新的对象设计。

  1. 最短的命名方案(不计空格)为 304字节

最短的命名方案

db.words.createIndex({
     "w": "text",
     "p.v.c.in.p" : "text",
     "p.v.c.in.pt" : "text",
     "p.v.c.in.i" : "text",
     "p.v.c.in.c" : "text",
     "p.v.c.in.f" : "text",
     "p.v.c.im.a" : "text",
     "p.v.c.im.n" : "text",
     "p.v.c.s.p" : "text",
     "p.v.c.s.i" : "text",
     "p.v.c.s.i2" : "text",
     "p.v.c.s.f" : "text",
     "p.v.c.i": "text",
     "p.v.c.g": "text",
     "p.v.c.p": "text",
})

如何为数据库设计创建索引?

0 个答案:

没有答案