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]}}}
)
mongoDB3.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、...の順に並べられた最近のすべてのタイトルを持ちます。mostRecentTitleのインデックス0、1、および2の結果がすでにあるため、これを使用してこの結果に満足している場合。他のタイトルは、アプリケーション側では単純に無視できます。
それでも満足できない場合は、出力コレクション'aggr_out'を更新して、このコレクションからデータを読み取ります。クエリは、
db.aggr_out.update(
{},
{$push: {
mostRecentTitle: {$each:[], $slice:3}
}
}
)
上記の操作では、mostRecentTitle配列がスライスされ、最新の3つのタイトルが含まれるようになります。このコレクションを読んで、希望する結果を取得してください。