我有照片集合,我必須顯示相冊中的當前照片位置。排序條件很複雜:sort({added:1,weight:1,_id:1}),所以沒有機會檢查當前照片的數量。如何計算MongoDB中的排序查詢的行號?
我試圖使用MapReduce,但與PostgreSQL(44ms)相比,它的工作速度非常慢(615毫秒)。
在Mongo中獲取某些元素的行號的最佳做法是什麼?
我有照片集合,我必須顯示相冊中的當前照片位置。排序條件很複雜:sort({added:1,weight:1,_id:1}),所以沒有機會檢查當前照片的數量。如何計算MongoDB中的排序查詢的行號?
我試圖使用MapReduce,但與PostgreSQL(44ms)相比,它的工作速度非常慢(615毫秒)。
在Mongo中獲取某些元素的行號的最佳做法是什麼?
這是一個類似分頁的問題。本質上,你應該執行計數客戶端。如果你想有一個穩定的訂單,你也應該根據_id
字段排序(因爲它是不可變的)。顯然,你已經這麼做了。
[pseudocode]
var criteria = { "album_id" : "foo", ... };
var skip = 50; // assuming we're on page 2 and each page has 50 photos
var cursor = db.Photo.find(criteria).
sort({"added" :1, "weight" : 1, "_id" : 1}).
skip(skip).limit(50);
// count() doesn't honour skip or limit, so this is total number of
// Photos matching 'criteria'
var count = cursor.count();
for(var i = 0; i < cursor.length; ++i)
cursor[i].index = skip + i;
// each photo is now cursor[x].index of 'count' photos total
希望幫助
但是,如果用戶來到頁面/照片/
聽起來好像照片的索引與自己的相關性 - 用戶可以修改他們的專輯來改變位置嗎?在這種情況下,明確地存儲此信息是有意義的,例如將每張專輯的圖片ID存儲在列表中,如「專輯{圖片:[」id1「,」id4「,」id2「,」id3「] }'。如果沒有,您可能需要將url方案修改爲'/ albums /:albumId/images /:imageIndex' – mnemosyn 2013-03-28 15:03:15
如你所知,MongoDB的沒有行號,所以什麼是你想用行號怎麼辦? – WiredPrairie 2013-03-26 12:37:20
你想要插入你的照片集的順序? – 2013-03-26 12:46:27
我只需要在相冊中顯示照片的當前位置。例如:當前照片是578中的55。但我不知道正確的方法。 – 2013-03-26 12:53:31