我正在实现一个排序流,它存储如下的数据
{_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个对象具有相同的更新日期,我的分页将不会继续。
用于分页我有上一页的最后一个文档
我可以提取_id
和updated
是否可以执行类似
的操作$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个项目似乎是不切实际的,并且对于很多用户来说是不可扩展的。