我有一个集合,其模式类似于:
{
_id: ObjectId,
DatasetID: UUID,
ID: UUID,
Model.Footprint: GeoJSONType
LastUpdateTimeMs: long
}
我正在发出如下查询:
db.getCollection('redacted').find(
{
"DatasetID":UUID("redacted"),
"Model.Footprint" : {
$geoIntersects : {
$geometry : {
type: "Polygon",
coordinates: redacted
}
}
},
"LastUpdateTimeMs" : { $gte: 1 },
"_id": { $gt: ObjectId("redacted")},
})
.sort({ "_id": 1})
.limit(100)
我有以下两个索引:
{
"DatasetID" : 1,
"_id" : 1,
"LastUpdateTimeMs" : 1,
"Model.Footprint" : "2dsphere"
}
{
"DatasetID" : 1,
"ID" : 1
}
我的查询似乎总是使用第二个索引而不是第一个索引,即使第二个结果在包括排序在内的多个阶段中也是如此。我一生无法弄清楚为什么它使用了错误的索引,我们将不胜感激。
由于最大字符数限制,我已粘贴bind的解释输出:https://pastebin.com/LcC3nYCg
[编辑]:上传了正确的说明消息。