我正在尝试在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我不想更改名称,因为它会使读者不那么友好,我将不得不重写大量代码以匹配新的对象设计。
最短的命名方案
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",
})
如何为数据库设计创建索引?