如何计算行数在MongoDB排序查询



我有一个带有照片的集合,我必须显示照片在相册中的当前位置。排序条件很复杂:Sort ({added:1,weight:1,_id:1}),因此没有机会检查当前之前的照片计数。

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

在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

希望有帮助

相关内容

  • 没有找到相关文章

最新更新