【发布时间】:2011-05-26 00:20:53
【问题描述】:
在 MongoDB 中,我正在对包含约 350 万个对象的集合进行地理查询,以返回接近某个纬度/经度的结果。如果我在对象上有一个基本的 2d 索引,则此查询运行良好:
db.Listing.ensureIndex( { Coordinates: "2d" } );
但是现在我还想在 geonear 查询中按其他字段(价格、房产类型、建造年份、床、浴室等)进行过滤。当我向查询中添加价格
我尝试为每个其他字段添加单独的索引(集合上的总索引为 11 个),但这使得每次查询都超时,我猜是因为集合只能处理这么多索引?
db.Listing.ensureIndex( { Coordinates: "2d" } );
db.Listing.ensureIndex( { Price: 1 } );
db.Listing.ensureIndex( { Beds: 1 } );
db.Listing.ensureIndex( { Baths: 1 } );
etc...
现在我正在考虑在集合中只有 1 个复合索引,如下所示:
db.Listing.ensureIndex( { Coordinates: "2d", Price: 1, PropertyType: 1, YearBuilt: 1, Beds: 1, Baths: 1, HouseSize: 1, LotSize: 1, Stories: 1 } );
这是正确的方法还是有更好的方法?
【问题讨论】:
标签: mongodb