2015-11-05 3 views
0

У меня есть следующая структура статьи:Как взять последнюю статью для каждой категории в mongodb?

var articleSchema=new Schema({ 
    id : Number, 
    title : String, 
    sefriendly : String, 
    created : Date, 
    categories: [ 
     { 
      id: Number, 
      name: String, 
      sefriendly: String, 
      image: String 
     } 
    ], 
    author: { 
     id: Number, 
     name: String 
    } 
}); 

Так что я хочу, чтобы взять одну последнюю статью, отсортированных по created поле для набора categoryIds. Например, у меня есть категории, такие как Cinema, TV, Music, Books, и я хочу взять последнюю статью для каждой категории. Можно ли сделать в одном запросе?

ответ

1

Сначала нужно создать индекс для созданной даты и категории идентификаторов:

db.article.ensureIndex ({ "созданы": - 1, "categories.id": 1})

затем принять последнюю статью:

db.article.aggregate( [ {$unwind : "$categories"}  { $sort: {"created":-1,"categories.id":1 } },  {  $group:   {   _id: {"categories_id":"$categories.id"},   lastDate: { $last: "$created" }   }  } ] ,{"allowDiskUse":true}) 

Может быть, есть маленькая ошибка синтаксиса

+0

Эммы, что не работает. Если последние статьи X были созданы в категории Y, мне нужно было бы знать X, чтобы найти первую статью следующей категории. –

+0

Но мне нужны все поля статьи, которые нужно взять, и есть только дата и category.id –

+0

, если вы хотите, чтобы все поля поля добавлялись внутри _id: {...} наподобие: http://stackoverflow.com/questions/16662405/ mongo-group-query-how-to-keep-fields –

Смежные вопросы