mongodb - 如何在 MongoDB 中索引 "or"?

标签 mongodb indexing database

假设我有很多与此类似的文档...

{
    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/

相关文章:

java - jpa 持久保存具有两个所有者的同一对象

mongodb - 在 MongoDB shell 中更新查询

mongodb 全文搜索和 json 对象

php - 为什么这会不断返回 PHP 错误警告 : mysql_num_rows() expects parameter 1 to be resource

postgresql - 在外表 PostgreSQL 上创建索引

indexing - ElasticSearch索引geo_shape错误rMapperParsingException解析失败

mysql - 将 100 亿行导入 mysql

Go 中的 MongoDB shardCollection 命令

mongodb - Grails Mongodb插件无法保存

elasticsearch - Elasticsearch-将INDEX从Windows机器迁移到Linux机器