我有照片集合,我必须显示相册中的当前照片位置。排序条件很复杂: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