【发布时间】:2016-02-09 22:30:37
【问题描述】:
我们正在使用 mongodb $or 运算符来过滤数据。以下查询未使用任何索引。
{
data.username: "xxxxx",
$or: [
{
data.timestamp: {
$gte: 1428405480000,
$lte: 1428406380000
},
data.finished: false
},
{
data.timestamp: {
$gte: 1428319980000,
$lte: 1428406380000
},
data.finished: true
}
]
}
我们在集合上定义了以下索引:
索引1
{
"data.username" : 1.0,
"data.uuid" : 1.0,
"data.timestamp" : -1.0
}
索引2
{
"data.username" : 1.0,
"data.userid" : 1.0,
"data.timestamp" : 1.0,
"data.finished" : 1.0
}
索引3
{
"data.username" : 1.0,
"data.timestamp" : 1.0,
"data.finished" : 1.0
}
索引4
{
"data.username" : 1,
"data.finished" : 1,
"data.timestamp" : 1
}
MongoDB 没有使用上述索引。我们正在使用 WiredTiger 存储引擎。解释命令的结果返回 explain.queryPlanner.indexFilterSet = false
【问题讨论】:
-
问题是??
-
在文档中有一个专门的部分(docs.mongodb.org/manual/reference/operator/query/or/…)。您是否尝试过“为了支持此查询,而不是复合索引,您将创建一个数量索引和另一个价格索引”部分?