字段和模式级别的 Mongoose 索引

Geo*_*ess 3 mongoose mongodb

我知道如果实施得当,索引可以成为快速检索数据的宝贵工具。我希望能够扫描我的文档以查找某个字段值字段值的组合。

我将索引两个字段(类别、标签)。类别是一个字符串,标签是一个数组。我需要能够查询特定类别中的项目和/或包含特定标签的项目。

下面是三个例子:

  1. 显示类别中的所有文件:“汽车”
  2. 显示所有包含标签的文件:“electric”
  3. 向我显示“汽车”类别中包含“电动”标签的所有文档

两个字段的模式级别索引是否足以满足所有三种情况?

docSchema.index({category:1, tags:1});
Run Code Online (Sandbox Code Playgroud)

或者我是否还需要在字段级别定义它们,以支持我只搜索单个字段时的场景?

docSchema = mongoose.Schema({
    category: {
        type: String,
        index: true
    },
    tags: {
        type: [String],
        index: true
    }
});
Run Code Online (Sandbox Code Playgroud)

Leo*_*ava 5

docSchema.index({category:1, tags:1}); 是一个复合索引。

此复合索引支持场景 1 和 3:

-> 显示类别中的所有文件:“汽车”

-> 显示“汽车”类别中包含“电动”标签的所有文档

为了支持场景 2,您需要在字段上定义一个额外的单一索引tagdocSchema.index({tags:1});

复合索引支持涉及复合索引中所有字段的查询以及涉及复合索引前缀的查询。在这种情况下,您的复合索引支持涉及类别和标签的查询以及仅涉及类别的查询。

为了更好地理解逻辑,请查看MongoDB 文档站点上的复合索引文章。请特别注意讨论Prefixes的部分。