MongoDB复合索引+多索引+索引交集

时间:2018-05-06 14:43:52

标签: mongodb performance indexing nosql

所以,我使用MongoDB 3.6来存储我的数据。集合架构如下所示。

{
    enabled: Boolean,
    opening_hours: {
        0: [{
            from: Number,
            until: Number
        }],
        1: [{
            from: Number,
            until: Number
        }],
        ...
        6: [{
            from: Number,
            until: Number
        }],
    },
    opening_exceptions: [{
        from: Date,
        until: Date
    }],
    opening_whitelist: [{
        from: Date,
        until: Date
    }],
    category: String,
    payment_methods: [String]
}

我的查询如下所示:

{
   "enabled":true,
   "$or":[{
        "opening_hours.5": {
            "$elemMatch": {
                "from": { "$lte":698 },
                "until": { "$gte":698 }
            }
        }
    }, {
        "opening_whitelist": {
            "$elemMatch": {
                "from": { "$lte":new Date(1525444711573) },
                "until": { "$gte":new Date(1525444711573) }
            }
        }
    }],
    "opening_exceptions": {
        "$not": {
            "$elemMatch": {
                "from": { "$lte":new Date(1525444711573) },
                "until": { "$gte":new Date(1525444711573) }
            }
        }
    },
    "category": { $in: ["Tecno"] },
    "payment_methods": { $in: ["visa"] }
}

categorypayment_methods字段有时会出现在查询中以及$oropening_exceptions

此查询需要尽可能快地运行,因此我正在尝试索引集合。我已经阅读了大多数有关索引的MongoDB文档(复合索引,利用索引交集的多索引)。但是,MongoDB不支持并行数组索引(由于多种原因),即使我尝试为查询的每个组合创建索引,Mongo似乎也没有利用(看到cursor.explain()输出)足够的指数。

有关如何索引此集合以获得最佳查询效果的任何想法?

可能在架构中添加一些元数据以使其可索引?

谢谢!

0 个答案:

没有答案