【发布时间】:2015-07-31 21:40:01
【问题描述】:
我正在执行一个聚合查询,我想选择一个包含文档数组的单个文档,然后我根据条件过滤掉这些文档。我想实现一个分页系统,所以我依赖$skip 运算符。
问题是,即使在订购了我的文档之后,$skip 也会从 first 文档开始,而我希望从末尾开始跳过这些文档。
myCollection.aggregate( {$match : {title : title, available : true} },
{$unwind : '$versions'},
{$match : {'versions.active' : true } }
, {$sort : {'versions.dateAdded' : 1}},
{$skip : offset},
{$limit : 10} );
offset 是我要计算的值。
说我有查询选择文档
{
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 运算符,但它只返回数组的完整大小,并且只有那些元素满足条件。
【问题讨论】:
标签: mongodb mongoose mongodb-query