我有一個存儲有關文章信息的集合。該集合用於存檔目的,因此它是隻讀的。目前只有兩個字段正在使用:「title」和「page_length」。因爲我總是希望首先獲取較長的文章,所以我有以下索引:{title:1,page_length:-1}。是否可以物理地重組mongoDB集合以避免使用sort()?
我發現這種排序仍然很慢,因爲集合非常大,不適合內存。
假設幾乎每查詢我使用這個集合將需要排序({page_length:-1}),有什麼辦法簡單地按照page_length降序存儲在磁盤上的記錄?換句話說,是否有一種簡單的方法可以使集合中的第一條記錄成爲最大的page_length值,第二條記錄是第二大的記錄等等?
這樣我就可以使用limit(n)獲取前n條記錄,而無需運行排序。有任何想法嗎?
更多信息的更新:
我用這一個搜索自動完成功能,這樣的速度是至關重要的。我一直在使用看起來像這樣的查詢:我很高興能創建多個索引,因爲插入不關心
db.articles.find({"title": /^SomeKeyword/}).sort({page_length:-1})
,我只是想最大限度地提高讀取速度。
編輯:作爲參考,我實際上能夠通過使用find()。forEach()將新集合中的記錄重新組織起來。然後我搜索了這個集合,並且獲得了前N個結果,而不需要任何排序,這非常有效。請注意,這隻適用於我的數據集不會改變。
你能給我舉例說明我怎麼能做到這一點? – soulkphp