假设我有很多与此类似的文档...
{
name: 'alex',
city: 'LA',
about: 'designer',
}
db.people.find({'name':'alex', $or: [{'city':'LA'}, {'about':'designer'}] });
如果我想查询它,我该如何索引它?每次有“或”时都需要 2 个索引吗?
最佳答案
索引中的第一个单词始终是 official Mongo index documentation .
为了更直接地回答这个问题,如果您希望查询不仅仅对“名称”使用索引,则需要为所有三个字段建立索引。虽然这可以通过三个单独的索引来完成,但一对复合索引可能会给出更好的结果:
db.people.ensureIndex({name:1, city:1});
db.people.ensureIndex({name:1, about:1});
但是,在决定任何选项之前,我会利用 Mongo 的 explain method确定每个索引相对于无索引查询能给您带来哪些好处(在与预期生产数据集一样大的数据集上进行测试)。我会特别注意每个索引组合的“nscanned”和“nscannedObjects”属性,并使用“indexOnly”和“isMultiKey”验证是否使用了所需的索引。
最后一点,过度索引也会导致性能问题 - 如果没有,我们就不必确保索引。确保您需要的索引读取速度增益大于这些索引的写入速度损失。
关于mongodb - 如何在 MongoDB 中索引 "or"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857443/