带有文档修改日期的MongoDB分页

带有文档修改日期的MongoDB分页,mongodb,pagination,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:0

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

{_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个以上的对象具有相同的更新日期,我的分页将不会继续

对于分页,我有上一页的最后一个文档 我可以提取
\u id
更新的

有可能做像这样的事情吗

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

更新:

可以使用@Blakes Seven建议的方法,即将看到的所有
文档存储在会话数组中,并使用
$nin
。这是一个显而易见的解决方案,但它让我的前端行为变得一团糟。您不能打开多个选项卡,这些选项卡将使用其他选项卡使用的相同会话空间


另外,在我的例子中,在RAM中存储100个项目似乎不切实际,而且对许多用户来说不可扩展。

可能重复@BlakesSeven。不幸的是,我无法使用会话,因为存在拱形约束。这不是关于“会话”本身,而是关于保留值。您已经说过“我有上一页的最后一个文档”,这是您需要的部分内容(还意味着请求之间的存储)。另一部分是将公共
\u id
值列表保持为排序(日期)的“相同”值。除了过滤出大于/小于排序值的值之外,您真正需要的是相同排序值的其他
\u id
值。答案就是这样解释的。你就是这么做的。评论太长了。所以这是同样的问题。当然,基本分辨率相同。我从客户端获取最后一个文档(
next\u page
token of sort)。如果公共id超过100怎么办?在我的情况下,有可能有超过100个项目在同一时间修改!它将在循环中每次返回相同的20个文档