2017-02-23 151 views
1

У меня есть 3 коллекции: пользователь, сообщение и комментарий. Сообщения имеют несколько комментариев. Я хочу, чтобы захватить 50 сообщений, заселить автор, заполнить комментарии, но я хочу только топ-наиболее голосовали комментарии, отсортированные по дате (_id)Mongoose query: populate top 2 комментария из Post Schema

const PostSchema = new Schema({ 
    author: { 
    type: Schema.Types.ObjectId, 
    ref: 'User' 
    }, 
    content: String, 
    comments: [{ 
    type: Schema.Types.ObjectId, 
    ref: 'Comment' 
    }] 
}); 
const Post = mongoose.model('Post', PostSchema); 


const CommentSchema = new Schema({ 
    author: { 
    type: Schema.Types.ObjectId, 
    ref: 'User' 
    }, 
    content: String, 
    votes: Number 
}); 
const Comment = mongoose.model('Comment', CommentSchema); 

Post 
    .find({}) 
    .limit(50) 
    .populate('author') 
    .populate('comments') 
    ... 

, и я не знаю, как этого добиться.

ответ

2

Вы можете использовать mongoose populate options, чтобы настроить свое население. В этом случае limit это до 2.

Попробуйте это:

Post 
    .find({}) 
    .limit(50) 
    .populate('author') 
    .populate({ 
     path :'comments', 
     options : { 
     sort: { votes: -1 }, 
     limit : 2 
     } 
    }); 

В случае, если вы хотите больше cusomization, вы можете использовать mongoose Query conditions (выбрать, матч, модель, путь и т.д.) и options вместе.

Прочтите Mongoose Population documentation для получения более подробной информации.

+0

Спасибо, что работает: 'Post .find ({}) .limit (50) .populate ('автор') .populate ({ путь: 'комментарии', варианты: {сортировать: {голосов: -1}, limit: 2} }); ' – Artur