どのフレームワークを使用していますか?これはMongoDBシェルではなく、MapReduceの奇妙なラッパーのように見えます。その場合、$ unwindは使用できず、集約フレームワークのユーザーに必要です。モンゴシェルに必要なものは次のとおりです:
db.articles.aggregate([
{$match: { class_date: { $gte: date } } },
{$project: { _id: 0, class_artist: 1 } },
{$unwind: "$class_artist" },
{$group: { _id: "$class_artist", tags: { $sum: 1 } }},
{$project: { _id: 0,class_artist: "$_id", tags: 1 } },
{$sort: { tags: -1 } }
])
とても効率的に:
- 過去7日間の変数をすでに設定しているため、日付でフィルタリングします
- 必要なフィールドのみを投影します{必要なのは1つだけです! }
- 配列を巻き戻して、すべてのドキュメントのすべての配列要素のレコードを作成します
- 展開されたドキュメントからアーティストをグループ化する
- _idをいじりまわしたグループとして使用できるドキュメント形式に投影します
- 結果を逆の順序で並べ替えて、最初にタグ付けされたトップを表示します
また、集約の優れている点は、これらのステージを徐々に構築して、何が起こっているかを確認できることです。
必要に応じて、独自のドライバー実装またはODMフレームワークにシェイクしてベイクします。