私はMongoose 3.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
,skip
とlimit
関数を組み合わせることですが、通常のコレクションでそれらを使用する方法は知っていますが、それらをサブドキュメントに適用する方法については手がかりが必要です. 何か考えはありますか?