В mongoDB 3.2 можете да направите това, като използвате обобщената заявка от следния формуляр:
db.collection.aggregate(
{$sort: {created: -1}},
{$group: {_id:'$city', title:{$push: '$title'}},
{$project: {_id:0, city: '$_id', mostRecentTitle: {$slice: ['$title', 0, 2]}}}
)
Много е трудно да се постигне същото с помощта на mongoDB 3.0. Има много мръсен трик, за да се постигне това в 3.0. Това включва няколко стъпки и друго събиране.
Първо направете обобщение и изведете резултата във временна колекция, наречена „aggr_out“
Заявка:
db.collection.aggregate([
{$sort: {created: -1}},
{$group: {_id:'$city', title:{$push: '$title'}},
{$project: {city: '$_id', mostRecentTitle: '$title'}},
{$out: 'aggr_out'}]
)
Използвайки горната заявка, mostRecentTitle ще има всички скорошни заглавия, подредени от индекс 0, 1, 2, ... Ако сте доволни от този резултат, използвайте това, тъй като вече имате резултата в индекси 0,1 и 2 на mostRecentTitle. Други заглавия могат просто да бъдат игнорирани от страната на приложението.
И все пак, ако не сте доволни, направете актуализация на изходната колекция 'aggr_out' и прочетете данните от тази колекция. Заявката е,
db.aggr_out.update(
{},
{$push: {
mostRecentTitle: {$each:[], $slice:3}
}
}
)
Горната операция ще раздели масива mostRecentTitle, така че да съдържа най-новите три заглавия. Прочетете тази колекция, за да получите желания резултат.