MongoDB分页与文档修改日期

时间:2015-11-14 10:28:09

标签: mongodb pagination

我正在实现一个排序流,它存储如下的数据

{_id:ObjectId(), owner:1, text:"some text1", created:"2015-11-14T01:01:00+00:00", updated:"2015-11-14T01:01:00+00:00"}
{_id:ObjectId(), owner:1, text:"some text2", created:"2015-11-14T01:01:00+00:00", updated:"2015-11-14T01:01:00+00:00"}
{_id:ObjectId(), owner:1, text:"some text3", created:"2015-11-14T01:01:00+00:00", updated:"2015-11-14T01:02:00+00:00"}
...
{_id:ObjectId(), owner:1, text:"some text4", created:"2015-11-14T01:30:00+00:00", updated:"2015-11-14T01:31:00+00:00"}
...

请注意,批量更新频繁,这意味着可以同时更新10-20个文档。

我的聚合查询看起来像这样

db.stream.aggregate([
    $match: { 
        'owner': 1, 
        'updated': { $lte: '2015-11-14T01:30:00+00:00' } },
    $sort: { 'updated': -1 },
    $limit: 10
]) 

如果有超过10个对象具有相同的更新日期,我的分页将不会继续。

用于分页我有上一页的最后一个文档 我可以提取_idupdated

是否可以执行类似

的操作
$match : {updated :{ $lt: last_page_ele.updated} }
$sort : { updated }
$match : { `documents which comes after the last element in this order` }
$limit : 10 

更新:

可以使用@Blakes Seven建议的方法,即将所有seen文档存储在会话数组中并使用$nin。这是一个明显的解决方案,但它搞砸了我的前端行为。您无法打开多个选项卡,这些选项卡将使用其他选项卡使用的相同会话空间。

另外在我的情况下,在RAM中存储100个项目似乎是不切实际的,并且对于很多用户来说是不可扩展的。

0 个答案:

没有答案