我知道,如果实现得当,索引可以成为快速检索数据的宝贵工具。我希望能够扫描我的文档以查找某个字段值或字段值的组合。
我将索引两个字段(类别、标签)。类别是一个字符串,标签是一个数组。我需要能够查询特定类别中的项目和/或包含特定标签的项目。
这里是三个例子:
- 显示类别中的所有文档:“汽车”
- 显示所有包含标签的文档:“electric”
- 显示“汽车”类别中包含“电动”标签的所有文档
两个字段的架构级索引是否足以满足所有三种情况?
docSchema.index({category:1, tags:1});
或者我是否还需要在字段级别定义它们,以支持我只搜索单个字段时的场景?
docSchema = mongoose.Schema({
category: {
type: String,
index: true
},
tags: {
type: [String],
index: true
}
});
最佳答案
docSchema.index({category:1, tags:1});
是复合索引。
此复合索引支持场景 1 和 3:
-> 显示类别中的所有文档:“汽车”
-> 显示“汽车”类别中包含“电动”标签的所有文档
为了支持场景 2,您需要在 tag
字段上定义一个附加单一索引。
docSchema.index({tags:1});
复合索引支持涉及复合索引中所有字段的查询以及涉及复合索引的前缀的查询。在这种情况下,您的复合索引支持涉及 categories 和 tags 的查询以及仅涉及 categories 的查询。
为了更好地理解逻辑,请查看 Compound Indexes MongoDB 文档站点上的文章。请特别注意讨论前缀的部分。
关于mongodb - 字段和模式级别的 Mongoose 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30405537/