【问题标题】:MongoDB index: object keys vs array of stringsMongoDB索引:对象键与字符串数组
【发布时间】:2016-05-10 16:03:57
【问题描述】:

我是 MongoDB 的新手,一直在研究模式设计和索引。我知道您可以索引一个属性,而不管它的值(ID、数组、子文档等)如何,但我不知道索引字符串数组或嵌套对象的键是否有性能优势。

这是我正在考虑的两种情况的示例(在 Mongoose 中):

// schema
mongoose.Schema({
    visibility: {
        usa: Boolean,
        europe: Boolean,
        other: Boolean
    }
});
// query
Model.find({"visibility.usa": true});

// schema
mongoose.Schema({
    visibility: [String] // strings could be "usa", "europe", and/or "other"
});
// query
Model.find({visibility: "usa"});

文档可以有一个、两个或所有三个可见性选项。

此外,如果我采用布尔对象设计,我可以简单地索引可见性字段还是需要在美国、欧洲和其他国家/地区建立索引?

【问题讨论】:

    标签: performance mongodb indexing mongoose schema


    【解决方案1】:

    在 MongoDB 中,在字符串数组上创建索引会生成 multiKey 索引,其中数组中的所有字符串形成索引键并指向同一个文档。因此,在您的情况下,它与嵌套对象键相同。

    如果您使用布尔设计,您可以将索引放在可见性字段上。您可以进一步阅读MongoDB Mulitkey indexing

    【讨论】:

    • 您知道这两种方法是否有任何性能优势吗?或者,如果一种结构比另一种更常见?
    • 任一结构的使用取决于您要执行的操作类型。例如,当您以第一种方法插入数据时,您将为每个字段设置布尔值,如第二种方法数组使您可以灵活地仅插入必填字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2015-06-06
    • 2021-07-18
    相关资源
    最近更新 更多