我正在运行如下查询:
db.sales.find({location: "LLLA",
created_at: {$gt: ISODate('2012-07-27T00:00:00Z')}}).
sort({created_at: -1}).limit(3)
此查询按预期工作,但其执行速度不够快。我在location字段上有一个索引,在created_at字段上有一个单独的索引。如果你发现我错过了一些明显的东西以便加快它,请告诉我。
感谢您抽出宝贵时间。
答案 0 :(得分:1)
Mongo不会对给定查询使用两个索引,如果您希望按location
过滤并按created_at
排序,则可以添加复合索引:
db.sales.ensureIndex({location: 1, created_at: -1})
当您遇到类似问题时,应该对查询运行explain
。特别是排序会导致索引的非直观复杂化,而explain
命令有时会使其显而易见。
值得注意的是,您通常可以按_id
排序以估算插入时间(假设自动生成ObjectId
值),但这对您来说不会像复合索引那样有用因为您要在其他字段上进行过滤。
答案 1 :(得分:0)
只需使用ID:
db.sales.find({location: "LLLA"}).sort({_id: -1}).limit(3)