MongoDB クエリを作成して、最新の成績日を持つレストランを検索します。
「レストラン」コレクションの構造:
{
"address": {
"building": "1007",
"coord": [ -73.856077, 40.848447 ],
"street": "Morris Park Ave",
"zipcode": "10462"
},
"borough": "Bronx",
"cuisine": "Bakery",
"grades": [
{ "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
{ "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
{ "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
{ "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
{ "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
],
"name": "Morris Park Bake Shop",
"restaurant_id": "30075445"
}
Query
db.restaurants.aggregate([
{ $unwind: "$grades" },
{ $sort: { "grades.date": -1 } },
{ $limit: 1 },
{ $project: { name: 1, "grades.date": 1, _id: 0 } }
])
Output
{
grades: { date: ISODate("2015-01-20T00:00:00.000Z") },
name: 'Ambassador Diner'
}
説明
このMongoDBの集約パイプラインは、’restaurants’ コレクション内のドキュメントを特定の手順に従って変換および絞り込むものです。具体的な手順は次の通りです:
$unwind: “$grades”:このステップでは、“grades” 配列内の各要素を展開して、各評価の情報を個別のドキュメントとして取り出します。
$sort: { “grades.date”: -1 }:このステップでは、”grades” 配列内の各評価を “date” フィールドで降順にソートします。つまり、最新の評価が最初に来るように並び替えられます。
$limit: 1:このステップでは、ソートされた評価ドキュメントの中から最初のものだけを選択します。つまり、最新の評価を持つドキュメントのみを残します。
$project: { name: 1, “grades.date”: 1, _id: 0 }:最後のステップでは、選択されたドキュメント内の特定のフィールドのみをプロジェクションし、出力ドキュメントを形成します。ここでは、”name” フィールドと “grades.date” フィールドを出力し、”_id” フィールドは除外されます。
この集約パイプラインの結果として、最新の評価を持つレストランの名前とその評価の日付が取得され、出力されます。
Previous:ブルックリンの中華レストランをすべて検索
コメント