Mongodb$near query扫描了我的大部分收藏
我收集了10万份文件 我执行以下查询:Mongodb$near query扫描了我的大部分收藏,mongodb,indexing,geospatial,database-performance,Mongodb,Indexing,Geospatial,Database Performance,我收集了10万份文件 我执行以下查询: db.pois.find({ location: { $near: { $geometry: { type: "Point", coordinates: [ 8.969423677143416, 45.9998108142721 ] } } }, status: "enabled", category_ids: { $in: [ ObjectId('56056db896b23c29e2000001') ] } }).skip(0).limit(1000)
db.pois.find({ location: { $near: { $geometry: { type: "Point", coordinates: [ 8.969423677143416, 45.9998108142721 ] } } }, status: "enabled", category_ids: { $in: [ ObjectId('56056db896b23c29e2000001') ] } }).skip(0).limit(1000)
因为我有这个复合索引:
{
"v" : 1,
"key" : {
"location" : "2dsphere",
"status" : 1,
"category_ids" : 1,
"properties.property_id" : 1,
"properties.value" : 1
},
"name" : "location_2dsphere_status_1_category_ids_1_properties.property_id_1_properties.value_1",
"ns" : "poi_database_production.pois",
"2dsphereIndexVersion" : 2
}
我期待着更好的表现
使用explain'executionStats',我看到正在使用索引,但检查的键是~5K;这是扫描文件的数量吗
但是我只有1K POI与给定的category_id关联,那么为什么要检查5K密钥呢
explain的完整输出为
我希望mongo使用索引来限制基于状态和类别的文档,然后使用地理空间部分来获取1K最近的POI
为什么我要做这样的扫描?这是正常行为吗?考虑到这一点,这相当正常。值得注意的是,您所谈论的是一个类别id,您似乎没有试图在查询中对其进行筛选。如果存在减少结果的因素,则将其添加到查询中。MangGDB也声明字段的索引顺序是合理的,但是我认为最好还是以最常用的顺序来实现复合索引字段,并且尽可能地过滤结果的顺序。这样做将减少扫描。还请注意,众所周知,地理空间查询错误地报道了扫描的数据items@BlakesSeven我复制粘贴了错误的查询;我更新了我的问题。您提到地理空间查询错误地报道了扫描的项目,这听起来不太好听。。。