首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“哪个$skip/skip()”返回元素的反向方式

“哪个$skip/skip()”返回元素的反向方式
EN

Stack Overflow用户
提问于 2015-07-31 13:26:38
回答 1查看 405关注 0票数 0

我正在执行一个聚合查询,其中我想选择一个包含文档数组的文档,然后根据一个条件过滤掉该文档。我想要实现一个分页系统,所以我依赖于$skip操作员。

问题是,即使在排序我的文档之后,$skip也将从第一个文档开始,而是希望从末尾开始跳过文档。

代码语言:javascript
复制
myCollection.aggregate( {$match : {title : title, available : true} }, 
                        {$unwind : '$versions'},
                         {$match : {'versions.active' : true } }
        ,               {$sort : {'versions.dateAdded' : 1}},
                         {$skip : offset},
                        {$limit : 10} );

其中offset是我要计算的值。

假设我有查询,选择文档

代码语言:javascript
复制
{
  title : 'ab',
  available : true,
  versions : [{name : 'v1', active : true, dateAdded: ISODATE...},
              {name : 'v2', active : true, dateAdded: ISODATE...},
              {name : 'v3', active : true, dateAdded: ISODATE...},
              {name : 'v4', active : true, dateAdded: ISODATE...},
              {name : 'v5', active : true, dateAdded: ISODATE...}]
}

我希望$skip操作符从最后一个数组元素开始。我认为一个可能的解决方案可能是返回从{$match : {'versions.active' : true}}中选择的元素数,然后减去偏移量,我尝试了$size操作符,但它只是返回数组的全部大小,并且只返回那些满足条件的元素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 13:40:01

我推测是因为您的排序不包含"title“在这里是唯一的任何其他键,如果”跳过/限制“在这里基本适用的话,情况就是这样。因此,只需“反转”排序顺序:

代码语言:javascript
复制
myCollection.aggregate([
     {$match : {title : title, available : true} }, 
     {$unwind : '$versions'},
     {$match : {'versions.active' : true } }
     {$sort : {'versions.dateAdded' : -1}},
     {$skip : offset},
     {$limit : 10},
     {$sort : {'versions.dateAdded' : 1}}
])

这意味着“向后”遍历列表,然后最后一个$sort在“跳过/限制”之后重新排序列表。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31747347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档