這個問題更新了一個更簡單的解釋。Mongoid to Mongo查詢翻譯
對於我的數據,以下Mongo CLI查詢需要208ms。該查詢檢索18個請求對象的所有數據。
db.videos.find({avg_rating:{$ gt:1},poster_large_thumb:{$ exists:true},release_date:{$ lte:ISODate(「2000-12-31」)}})。sort ({RELEASE_DATE:-1,AVG_RATING:-1,標題:1})。跳躍(30).limit(18).pretty()解釋()
{
"cursor" : "BasicCursor",
"nscanned" : 76112,
"nscannedObjects" : 76112,
"n" : 48,
"scanAndOrder" : true,
"millis" : 208,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
}
}
與Mongoid
然而,當我做查詢。它會創建一個沒有實際數據的標準對象。我將這個標準傳遞給迭代它來創建JSON數據結構的方法。由於需要數據,因此必須從數據庫中檢索每個對象。以下是返回標準的條件:
@videos = Video.order_by(release_date:-1,avg_rating:-1,title:1).where(:avg_rating.gt => 1,:poster_large_thumb.exists => 1 ,::release_date.lte => start_date).skip(skip * POSTERS_PER_ROW).limit(limit * POSTERS_PER_ROW)
當我迭代@videos時,每個對象都需要240ms才能從DB中檢索出來,這個來自某個調試輸出。
Getting one object:
2013-12-18 00:43:52 UTC
2013-12-18 00:43:52 UTC
0.24489331245422363
假設,如果我得到了在Video.order_by所有數據(...)查詢,將採取208ms總I怎麼能強迫它做檢索在一個查詢,而不是單獨獲取每個對象的?
這裏的一些東西導致整個檢索比Mongo CLI要多兩個數量級。
您的mongod日誌將記錄每個需要超過100毫秒的查詢 - 您可以在那裏看到它們的樣子。 –