2012-07-27 58 views
1

快捷方式我運行類似以下的查詢:蒙戈:尋找最後n插入到一個集合

db.sales.find({location: "LLLA", 
       created_at: {$gt: ISODate('2012-07-27T00:00:00Z')}}). 
     sort({created_at: -1}).limit(3) 

此查詢工作正常,但它不執行速度不夠快。我在位置字段上有一個索引,在created_at字段上有一個單獨的索引。請讓我知道,如果你看到我錯過了一些明顯的東西,讓它更快。

感謝您在此上的時間。

回答

1

蒙戈不會用兩個指標對於給定的查詢,如果你想通過過濾器和location排序created_at您可以添加一個複合索引:

db.sales.ensureIndex({location: 1, created_at: -1}) 

當您遇到類似問題時,您應該針對您的查詢運行explain。特別是排序會導致非直觀的索引複雜化,並且命令有時會使其明顯的原因。

同樣值得注意的是,通常您可以按_id排序以近似插入時間(假設自動生成的值爲ObjectId),但在這種情況下,這不會像複合索引那樣幫助您,因爲您正在過濾一個額外的領域。

0

只是使用的ID:

db.sales.find({location: "LLLA"}).sort({_id: -1}).limit(3)