如何在MongoDB中计算排序查询的行号?

时间:2013-03-26 11:33:50

标签: mongodb mapreduce row-number

我收集了照片,我必须在相册中显示当前的照片位置。排序条件很复杂:排序({added:1,weight:1,_id:1})所以没有机会在当前之前检查照片的数量。

我尝试使用MapReduce,但与PostgreSQL(44ms)相比,它的工作速度非常慢(615毫秒)。

获取Mongo中某些元素的行号的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

这是一个类似分页的问题。基本上,您应该执行计数客户端。如果您想要一个稳定的订单,您也应该按_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

希望有所帮助