2016-12-05 2 views
2

Итак, скажем, у меня 3 блоггера. У каждого из них много сообщений.Выберите последнее сообщение для каждого блоггера в коллекции

Я хочу выбрать последнее сообщение для каждого из них.

В настоящее время у меня есть этот псевдо код:

Bloggers.find({name: {$in: ['John','Mike','Arny']}}, (err, bloggers) => { 
    bloggers.forEach(blogger => { 
     blogger.latest_post = Posts.find({author: blogger.name}).sort({date: -1}).limit(1); 
    }) 
    displayItSomehow(bloggers); 
}) 

Здесь имя блоггера является имя группы. В каждой группе есть много документов, но мне нужно только одно в соответствии с некоторыми критериями.

Blogger коллекции, как это:

{name: 'John', id: 1}, 
{name: 'Mike', id: 2}, 
{name: 'Arny', id: 3} 

Сообщений Коллекция:

{ title: 'title1', text: 'blablabla', date: 111, author: 1 }, 
{ title: 'Nowadays football became...', text: 'blablabla', date: 112, author: 1 }, 
{ title: 'title1', text: 'blablabla', date: 113, author: 2 }, 
{ title: 'The story of my neighbor starts when...', text: 'blablabla', date: 114, author: 2 }, 
{ title: 'title1', text: 'blablabla', date: 115, author: 3 }, 
{ title: 'title1', text: 'blablabla', date: 116, author: 3 }, 
{ title: 'Business and success are always were...', text: 'blablabla', date: 117, author: 3 } 

Результат должен быть таким:

John:  'Nowadays football became...' 

Mike:  'The story of my neighbor starts when...' 

Arny:  'Business and success are always were...' 

Итак, как я могу решить мою проблему на самом деле в мангуст ? Возможно ли это с одним запросом?

+1

Пожалуйста, добавьте образец коллекции к сообщению как блоггеров, так и сообщений – Veeram

+0

Is t шляпа лучше?) –

ответ

0

Запрос population является то, что вы ищете:

Bloggers 
    .find({name: {$in: ['John','Mike','Arny']}}) 
    .populate({ 
     path: 'posts', 
     options: { 
      limit: 1, 
      sort: {date: -1} 
     } 
    }) 
    .exec((err, bloggers) => { 
     displayItSomehow(bloggers); 
    }) 
}) 

Вот ссылка на документы для объекта конфигурации функции заселить: http://mongoosejs.com/docs/api.html#model_Model.populate

Это будет работать только, если вы определяете Bloggers схема:

var bloggerSchema = Schema({ 
    _id  : Number, 
    name : String, 
    // all your other fields... 
    posts: [{ type: Schema.Types.ObjectId, ref: 'Post' }] 
}); 
Смежные вопросы