Mongodb Mongoose中的子文档分页

Mongodb Mongoose中的子文档分页,mongodb,pagination,mongoose,Mongodb,Pagination,Mongoose,我使用的是Mongoose3.6,我的(简化的)模式如下所示 var commentSchema = new Schema({ created: Date }); var userSchema = new Schema({ comments : [commentSchema], }); 我想对评论进行分页,这样如果我有一个用户有25条评论,那么页面将分为: page 1: comments 15-24 page 2: comments 5-14 page 3: co

我使用的是Mongoose3.6,我的(简化的)模式如下所示

var commentSchema = new Schema({
    created: Date  
});

var userSchema = new Schema({
    comments    : [commentSchema],
});
我想对评论进行分页,这样如果我有一个用户有25条评论,那么页面将分为:

page 1: comments 15-24
page 2: comments 5-14
page 3: comments 0-4
page 4: empty
page 5: empty
...
这就是我尝试过的

this.findById(user_id, {
        comments: {
            $slice: [-comment_page_index * comments_per_page, comments_per_page]
        }
    }, function(err, user) {
        //...
});
虽然一开始这似乎是可行的,但我很失望地发现,
$slice
操作符在到达集合边界时切断了给定的索引

所以我得到的是

page 1: comments 15-24
page 2: comments 5-14
page 3: comments 0-9
page 4: comments 0-9
page 5: comments 0-9
...

这里更好的选项可能是将
排序
跳过
限制
功能组合在一起,但尽管我知道如何在常规集合中使用它们,但我必须了解如何将它们应用于子文档。有什么想法吗?

也许最好不要把所有的注释嵌入到用户中——一个活跃的用户会让文档无限期地增长,这对于性能来说不是一个好主意。谢谢你的建议,我会考虑的。无论如何,我想知道是否存在一种分页子文档的方法,而不必重构整个结构。您可以使用聚合框架-$展开子文档数组,然后使用$sort和$limit。这似乎是一种可行的方法。如果你想举个例子,并把它写在一个答案中,我将不胜感激:)无论如何,我会自己尝试