【发布时间】:2020-04-09 17:27:24
【问题描述】:
我过去玩过 mongodb,但这是我第一次从事项目。
我正在设计一本西班牙语词典。但是我在设计上遇到了麻烦。这是第一个设计。这些是存储在 mongodb 中的对象。
字典合集
{
word:"comer",
type:"infinitive",
Definition:"A definiition for the word hablar",
conjugation: {
present: ["como", "comes", "come", "comemos", "coméis", "comen"],
preterite:["comí", "comiste", "comió", "comimos", "comisteis", "comieron"],
}
},
// Lets pretend that this is another verb with different conjugation forms.
{
word:"hablar",
type:"infinitive",
Definition:"A definiition for the word hablar",
conjugation: {
present: ["como", "comes", "come", "comemos", "coméis", "comen"],
preterite:["comí", "comiste", "comió", "comimos", "comisteis", "comieron"],
}
}
通过这种设计,我可以通过比较 word:"a word" 属性来搜索单词。问题在于,在这种设计中搜索“como”是不可行的,或者至少效率不高。
第二种设计有两个集合Words和verbs
单词
{
word:"como",
infinitive:"comer",
},
{
word:"comer",
infinitive:"comer",
},
{
word:"comemos",
infinitive:"comer",
},
{
word:"habla",
infinitive:"hablar",
}
动词
{
word:"comer",
Definition:"A definiition for the word comer",
conjugation: {
present: ["como", "comes", "come", "comemos", "coméis", "comen"],
preterite:["comí", "comiste", "comió", "comimos", "comisteis", "comieron"],
}
},
{
word:"hablar",
Definition:"A definiition for the word hablar",
conjugation: {
present: ["como", "comes", "come", "comemos", "coméis", "comen"],
preterite:["comí", "comiste", "comió", "comimos", "comisteis", "comieron"],
}
}
通过这种设计,可以轻松搜索任何单词。然后可以使用 infinitive 属性来搜索 Verbs 集合。
现在的问题是需要两次搜索才能找到一个单词。更糟糕的是,要找到像单词 comer 这样的不定式,您首先要搜索 words 集合以找到相同的单词 comer,然后再查找它在动词集合中。
问题
必须执行两次搜索才能找到一个单词是否不寻常?
这是一个糟糕的设计还是可以改进?
我可以设计成只需要一次搜索吗?
注意:
我了解数据可以存储在多个集合中,因此可能需要进行多次搜索。但这是不同的,因为必须先进行一次搜索,然后再搜索多个集合以获取我们需要的信息。
【问题讨论】:
-
对于 first 设计,您为什么认为 "... 问题在于,在这种设计中搜索“como”是不可能的,或者至少不可能高效。” 您是否尝试过任何查询或在集合上创建任何索引?最常用的查询可能是什么样的?
-
您可以通过第一个“设计”轻松高效地搜索“como”为
dictionary.find({$or: [{word: "como"}, {"conjugation.present": "como"}, {"conjugation.preterite": "como"}]})。 -
@Prasad 可以有许多同名的单词,据我了解,在这些情况下不建议使用索引。还是我误解了索引的工作方式?
-
“可以有很多同名的词,我的理解是在这些情况下不建议使用索引。” 是的,可以有很多同名的词姓名;但是,索引是为了高效或快速搜索。
标签: node.js json mongodb database-design