Mongoose ODM:如何从嵌入式文档数组中获取第一个和最后五个元素?

时间:2013-09-04 07:22:57

标签: node.js mongodb mongoose slice

我正在用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'},
});

所以帖子嵌入在线程文档中。我想显示一些包含一些帖子的帖子:第一个和最近的五个。是否有可能在一个查询中实现?我可以使用切片函数获得第一个 OR 最新五个,但我想要比两个几乎相同的查询更优雅。这是我目前的查询:

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);
    });

0 个答案:

没有答案