4

NodeJS/Express/MongoDB を使用して単純なフォーラム エンジンを作成していますが、Mongo 用の Mongoose ODM に少し問題があります。

私はそれらのようなボード、スレッド、およびポストモデルを持っています(少し単純化されています):

var boardSchema = mongoose.Schema({
    _id: ObjectId,
});


var threadSchema = mongoose.Schema({
    _id: ObjectId,
    board: {type: ObjectId, ref: 'Board', index: true},
    posts: [postSchema],
});


var postSchema = mongoose.Schema({
    _id: ObjectId,
    thread: {type: ObjectId, ref: 'Thread'},
});

したがって、投稿はスレッド ドキュメントに埋め込まれます。最初の投稿と最新の 5 つの投稿を含むスレッドのリストを表示したいと考えています。1回のクエリでそれを達成することは可能ですか? スライス関数を使用して最初または最新の 5 つを取得できますが、2 つのほぼ同一のクエリよりも洗練されたものが必要です。これが私の現在のクエリです:

threadModel
    .find(
        {board: boardId, is_deleted: false}, 
        {posts: {$slice: -5}}
    )
    .sort({last_updated: 1, is_sticky: 1})
    .skip(settings.threadsOnPage * parseInt(pagePointer, 10))
    .limit(settings.threadsOnPage)
    .populate('board')
    .exec(function(err, threads){
        if (err) return callback(err);
        if (threads === []) return callback(404);
        callback(null, threads);
    });
4

0 に答える 0