【发布时间】:2013-08-14 23:16:48
【问题描述】:
我是索引新手。只需阅读docs。
如何创建如下所示的复合索引。我想在州名上创建一个索引,在该索引内,我想根据该州的人口创建一个索引。
state wise index
|
----------------------------------------------------
| | |
pop<2000 pop>2000 & pop<5000 pop>5000 & pop<10000
为@Derick 更新了问题:
这是我的模拟数据。
{"pop" : 1000,"state" : "AL"}
{"pop" : 1500,"state" : "AL"}
{"pop" : 2500,"state" : "AL"}
{"pop" : 3000,"state" : "AL"}
{"pop" : 6000,"state" : "AL"}
{"pop" : 8000,"state" : "CA"}
那么,
db.simplezips.createIndex({state:1, pop:1});
db.simpezips.find({state:"AL", pop:{$gte:2500}}).explain();
提供如下日志。这符合我的预期。
"n" : 3,
"nscannedObjects" : 3,
"nscanned" : 3,
"nscannedObjectsAllPlans" : 3,
"nscannedAllPlans" : 3,
问题:
- 我想知道的是,mongodb 如何对文档进行分桶/索引 基于人口。
- 如何自定义分桶? (如上图所示 图表。)
【问题讨论】:
-
你想用那个来完成什么?
-
@Philipp,通过创建如上所述的索引,我可以减少要扫描的行数。例如。如果查询是 state=="CA" 并且 pop>3000 上面的索引将只扫描落在中间和最后一个桶的文档。但是在没有如上所示的pop索引的情况下,它必须扫描状态索引下的所有文档。