カーソルを反復処理してすべての結果を表示する方法
このチュートリアルでは、カーソルを使い切るまで反復処理して、Atlas Search クエリのすべての結果を返す方法について説明します。 デフォルトでは、 mongosh
や MongoDB Compass などの一部の Atlas Search クライアントは、結果の最初の20ドキュメントまでを出力します。 すべての結果を一度に表示するには、カーソルが使い果たされるまで反復処理することをお勧めします。 カーソルを反復処理してすべての結果を表示する方法について、このチュートリアルでは次の手順について説明します。
sample_mflix.movies
コレクションに動的マッピングを使用して Atlas Search インデックスを設定します。カーソルが使い果たされるまで反復処理する Atlas Search クエリを実行し、
title
フィールドにsummer
という用語を含むすべてのドキュメントを取得します。
Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin
以上のアクセス権が必要です。
Atlas Search インデックスの作成
このセクションでは、動的マッピングを使用して、 sample_mflix.movies
コレクション内のすべての動的にインデックス付け可能なフィールドを自動的にインデックス化する Atlas Search インデックスを作成します。
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoClusters
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
GoAtlas Searchクラスターの ページに します。
GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。
サイドバーで、 Services見出しの下のAtlas Searchをクリックします。
[ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。
Atlas Searchページが表示されます。
クラスターの [Browse Collections] ボタンをクリックします。
データベースを展開し、コレクションを選択します。
コレクションのSearch Indexesタブをクリックします。
Atlas Searchページが表示されます。
クラスタの名前をクリックします。
[Atlas Search] タブをクリックします。
Atlas Searchページが表示されます。
Index Name を入力し、Database and Collection を設定します。
Index Nameフィールドに
iterate-cursor-tutorial
と入力します。インデックスに
default
と名付けると、 $searchパイプライン ステージでindex
パラメータを指定する必要がなくなります。 インデックスにカスタム名を付ける場合は、index
パラメータでこの名前を指定する必要があります。Database and Collectionセクションで、
sample_mflix
データベースを検索し、movies
コレクションを選択します。
インデックスの定義を指定します。
次のインデックス定義は、コレクション内のサポートされている型のフィールドを動的にインデックス化します。 インデックスを作成するには、 インターフェースで または を使用できます。Atlas SearchVisual EditorAtlas SearchJSON EditorAtlas user
[Next] をクリックします。
コレクションのデフォルトのインデックス定義を確認します。
[Next] をクリックします。
インデックスの定義を確認します。
インデックス定義は、次のようになります。
{ "mappings": { "dynamic": true } } [Next] をクリックします。
サンプル クエリの実行
➤ [言語を選択 ] ドロップダウン メニューを使用して、このページのサンプル クエリを実行するために使用する MongoDB クライアントを選択します。
このセクションでは、Atlas クラスターに接続し、 sample_mflix.movies
コレクションのtitle
フィールドに対してクエリを実行し、テキスト演算子を使用してSummer
というタームを検索します。 コレクションには、タイトルにSummer
というタームが含まれる75以上のドキュメントが含まれていますが、デフォルトでは、一部の Atlas Search クライアントはクエリの上位20結果のみを出力します。
クエリ用語のすべての結果を一度に表示するには、カーソルを使い切るまでカーソルを反復処理します。
mongosh
を使用してクラスターに接続します。
ターミナル ウィンドウでmongosh
を開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh
経由での接続 」を参照してください。
sample_mflix
データベースを使用します。
mongosh
プロンプトで次のコマンドを実行します。
use sample_mflix
switched to db sample_mflix
movies
コレクションに対して、以下のAtlas Searchクエリを実行します。
次のクエリでは、 toArray()メソッドを使用してカーソルを反復処理し、クエリ条件に一致するドキュメントを配列で返します。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "iterate-cursor-tutorial", 5 "text": { 6 "query": "summer", 7 "path": "title" 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 0, 14 "title": 1 15 } 16 } 17 ]).toArray()
1 [ 2 { title: 'Summer' }, 3 { title: 'Summer Stock' }, 4 { title: 'Violent Summer' }, 5 { title: 'Indian Summer' }, 6 { title: 'Indian Summer' }, 7 { title: 'Summer Rental' }, 8 { title: 'Summer Things' }, 9 { title: 'Wolf Summer' }, 10 { title: 'Summer Storm' }, 11 { title: 'Summer Palace' }, 12 { title: 'Eternal Summer' }, 13 { title: 'Summer Holiday' }, 14 { title: 'Summer Wars' }, 15 { title: 'Summer Games' }, 16 { title: 'Summer Nights' }, 17 { title: 'A Summer Place' }, 18 { title: 'Summer and Smoke' }, 19 { title: 'The Endless Summer' }, 20 { title: "Summer of '42" }, 21 { title: 'That Certain Summer' }, 22 { title: 'One Deadly Summer' }, 23 { title: 'Summer Camp Nightmare' }, 24 { title: 'An Unforgettable Summer' }, 25 { title: 'Summer of Sam' }, 26 { title: 'Bullets Over Summer' }, 27 { title: 'Summer in Berlin' }, 28 { title: 'A Plumm Summer' }, 29 { title: 'Summer Heights High' }, 30 { title: 'Summer of Goliath' }, 31 { title: 'Red Hook Summer' }, 32 { title: 'Ping Pong Summer' }, 33 { title: 'Summer of Blood' }, 34 { title: 'The End of Summer' }, 35 { title: 'Summer Wishes, Winter Dreams' }, 36 { title: "A Summer at Grandpa's" }, 37 { title: 'Cold Summer of 1953' }, 38 { title: 'A Brighter Summer Day' }, 39 { title: 'Summer of the Monkeys' }, 40 { title: 'A Storm in Summer' }, 41 { title: 'Wet Hot American Summer' }, 42 { title: 'My Summer of Love' }, 43 { title: 'Nasu: Summer in Andalusia' }, 44 { title: 'A Summer in Genoa' }, 45 { title: '(500) Days of Summer' }, 46 { title: 'Summer Days with Coo' }, 47 { title: 'The Kings of Summer' }, 48 { title: 'May in the Summer' }, 49 { title: 'A Horse for Summer' }, 50 { title: 'The Summer of Sangaile' }, 51 { title: 'Smiles of a Summer Night' }, 52 { title: 'Shadows of a Hot Summer' }, 53 { title: 'That Summer of White Roses' }, 54 { title: 'Last Summer in the Hamptons' }, 55 { title: 'A Summer in La Goulette' }, 56 { title: 'A Summer by the River' }, 57 { title: 'Summer in the Golden Valley' }, 58 { title: 'How I Ended This Summer' }, 59 { title: 'And They Call It Summer' }, 60 { title: 'Spring, Summer, Fall, Winter... and Spring' }, 61 { title: 'The Last Summer of La Boyita' }, 62 { title: 'The Mafia Only Kills in Summer' }, 63 { title: 'I Know What You Did Last Summer' }, 64 { title: 'I Know What You Did Last Summer' }, 65 { title: 'Judy Moody and the Not Bummer Summer' }, 66 { title: 'I Still Know What You Did Last Summer' } 67 ]
次のクエリでは、 forEach()メソッドを使用してカーソルを反復処理し、JavaScript 関数printjson
を各ドキュメントに適用します。
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "index": "iterate-cursor-tutorial", 5 "text": { 6 "query": "summer", 7 "path": "title" 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 0, 14 "title": 1 15 } 16 } 17 ]).forEach(printjson)
1 { 2 title: 'Summer' 3 } 4 { 5 title: 'Summer Stock' 6 } 7 { 8 title: 'Violent Summer' 9 } 10 { 11 title: 'Indian Summer' 12 } 13 { 14 title: 'Indian Summer' 15 } 16 { 17 title: 'Summer Rental' 18 } 19 { 20 title: 'Summer Things' 21 } 22 { 23 title: 'Wolf Summer' 24 } 25 { 26 title: 'Summer Storm' 27 } 28 { 29 title: 'Summer Palace' 30 } 31 { 32 title: 'Eternal Summer' 33 } 34 { 35 title: 'Summer Holiday' 36 } 37 { 38 title: 'Summer Wars' 39 } 40 { 41 title: 'Summer Games' 42 } 43 { 44 title: 'Summer Nights' 45 } 46 { 47 title: 'A Summer Place' 48 } 49 { 50 title: 'Summer and Smoke' 51 } 52 { 53 title: 'The Endless Summer' 54 } 55 { 56 title: "Summer of '42" 57 } 58 { 59 title: 'That Certain Summer' 60 } 61 { 62 title: 'One Deadly Summer' 63 } 64 { 65 title: 'Summer Camp Nightmare' 66 } 67 { 68 title: 'An Unforgettable Summer' 69 } 70 { 71 title: 'Summer of Sam' 72 } 73 { 74 title: 'Bullets Over Summer' 75 } 76 { 77 title: 'Summer in Berlin' 78 } 79 { 80 title: 'A Plumm Summer' 81 } 82 { 83 title: 'Summer Heights High' 84 } 85 { 86 title: 'Summer of Goliath' 87 } 88 { 89 title: 'Red Hook Summer' 90 } 91 { 92 title: 'Ping Pong Summer' 93 } 94 { 95 title: 'Summer of Blood' 96 } 97 { 98 title: 'The End of Summer' 99 } 100 { 101 title: 'Summer Wishes, Winter Dreams' 102 } 103 { 104 title: "A Summer at Grandpa's" 105 } 106 { 107 title: 'Cold Summer of 1953' 108 } 109 { 110 title: 'A Brighter Summer Day' 111 } 112 { 113 title: 'Summer of the Monkeys' 114 } 115 { 116 title: 'A Storm in Summer' 117 } 118 { 119 title: 'Wet Hot American Summer' 120 } 121 { 122 title: 'My Summer of Love' 123 } 124 { 125 title: 'Nasu: Summer in Andalusia' 126 } 127 { 128 title: 'A Summer in Genoa' 129 } 130 { 131 title: '(500) Days of Summer' 132 } 133 { 134 title: 'Summer Days with Coo' 135 } 136 { 137 title: 'The Kings of Summer' 138 } 139 { 140 title: 'May in the Summer' 141 } 142 { 143 title: 'A Horse for Summer' 144 } 145 { 146 title: 'The Summer of Sangaile' 147 } 148 { 149 title: 'Smiles of a Summer Night' 150 } 151 { 152 title: 'Shadows of a Hot Summer' 153 } 154 { 155 title: 'That Summer of White Roses' 156 } 157 { 158 title: 'Last Summer in the Hamptons' 159 } 160 { 161 title: 'A Summer in La Goulette' 162 } 163 { 164 title: 'A Summer by the River' 165 } 166 { 167 title: 'Summer in the Golden Valley' 168 } 169 { 170 title: 'How I Ended This Summer' 171 } 172 { 173 title: 'And They Call It Summer' 174 } 175 { 176 title: 'Spring, Summer, Fall, Winter... and Spring' 177 } 178 { 179 title: 'The Last Summer of La Boyita' 180 } 181 { 182 title: 'The Mafia Only Kills in Summer' 183 } 184 { 185 title: 'I Know What You Did Last Summer' 186 } 187 { 188 title: 'I Know What You Did Last Summer' 189 } 190 { 191 title: 'Judy Moody and the Not Bummer Summer' 192 } 193 { 194 title: 'I Still Know What You Did Last Summer' 195 }
注意
デフォルトでは、MongoDB Compass は最初の10の結果を表示します。
MongoDB Compass のクラスターに接続します。
MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。
movies
コレクションに対して、以下の Atlas Search クエリを実行します。
次のクエリは、 $search
パイプライン ステージを使用してコレクションをクエリします。
MongoDB Compass でこのクエリを実行するには:
[Aggregations] タブをクリックします。
Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。
パイプラインステージクエリ$search
{ "index": "iterate-cursor-tutorial", "text": { "query": "Summer", "path": "title" } } $project
{ "id": 0, "title": 1 } 右上隅にあるExportをクリックします。
Export File TypeでJSONを選択します。
[Export...] をクリックします。
結果内のすべてのドキュメントを表示するには、 JSONファイルを開きます。
1 [{ 2 "title": "Summer" 3 }, 4 { 5 "title": "Summer Stock" 6 }, 7 { 8 "title": "Violent Summer" 9 }, 10 { 11 "title": "Indian Summer" 12 }, 13 { 14 "title": "Indian Summer" 15 }, 16 { 17 "title": "Summer Rental" 18 }, 19 { 20 "title": "Summer Things" 21 }, 22 { 23 "title": "Wolf Summer" 24 }, 25 { 26 "title": "Summer Storm" 27 }, 28 { 29 "title": "Summer Palace" 30 }, 31 { 32 "title": "Eternal Summer" 33 }, 34 { 35 "title": "Summer Holiday" 36 }, 37 { 38 "title": "Summer Wars" 39 }, 40 { 41 "title": "Summer Games" 42 }, 43 { 44 "title": "Summer Nights" 45 }, 46 { 47 "title": "A Summer Place" 48 }, 49 { 50 "title": "Summer and Smoke" 51 }, 52 { 53 "title": "The Endless Summer" 54 }, 55 { 56 "title": "Summer of '42" 57 }, 58 { 59 "title": "That Certain Summer" 60 }, 61 { 62 "title": "One Deadly Summer" 63 }, 64 { 65 "title": "Summer Camp Nightmare" 66 }, 67 { 68 "title": "An Unforgettable Summer" 69 }, 70 { 71 "title": "Summer of Sam" 72 }, 73 { 74 "title": "Bullets Over Summer" 75 }, 76 { 77 "title": "Summer in Berlin" 78 }, 79 { 80 "title": "A Plumm Summer" 81 }, 82 { 83 "title": "Summer Heights High" 84 }, 85 { 86 "title": "Summer of Goliath" 87 }, 88 { 89 "title": "Red Hook Summer" 90 }, 91 { 92 "title": "Ping Pong Summer" 93 }, 94 { 95 "title": "Summer of Blood" 96 }, 97 { 98 "title": "The End of Summer" 99 }, 100 { 101 "title": "Summer Wishes, Winter Dreams" 102 }, 103 { 104 "title": "A Summer at Grandpa's" 105 }, 106 { 107 "title": "Cold Summer of 1953" 108 }, 109 { 110 "title": "A Brighter Summer Day" 111 }, 112 { 113 "title": "Summer of the Monkeys" 114 }, 115 { 116 "title": "A Storm in Summer" 117 }, 118 { 119 "title": "Wet Hot American Summer" 120 }, 121 { 122 "title": "My Summer of Love" 123 }, 124 { 125 "title": "Nasu: Summer in Andalusia" 126 }, 127 { 128 "title": "A Summer in Genoa" 129 }, 130 { 131 "title": "(500) Days of Summer" 132 }, 133 { 134 "title": "Summer Days with Coo" 135 }, 136 { 137 "title": "The Kings of Summer" 138 }, 139 { 140 "title": "May in the Summer" 141 }, 142 { 143 "title": "A Horse for Summer" 144 }, 145 { 146 "title": "The Summer of Sangaile" 147 }, 148 { 149 "title": "Smiles of a Summer Night" 150 }, 151 { 152 "title": "Shadows of a Hot Summer" 153 }, 154 { 155 "title": "That Summer of White Roses" 156 }, 157 { 158 "title": "Last Summer in the Hamptons" 159 }, 160 { 161 "title": "A Summer in La Goulette" 162 }, 163 { 164 "title": "A Summer by the River" 165 }, 166 { 167 "title": "Summer in the Golden Valley" 168 }, 169 { 170 "title": "How I Ended This Summer" 171 }, 172 { 173 "title": "And They Call It Summer" 174 }, 175 { 176 "title": "Spring, Summer, Fall, Winter... and Spring" 177 }, 178 { 179 "title": "The Last Summer of La Boyita" 180 }, 181 { 182 "title": "The Mafia Only Kills in Summer" 183 }, 184 { 185 "title": "I Know What You Did Last Summer" 186 }, 187 { 188 "title": "I Know What You Did Last Summer" 189 }, 190 { 191 "title": "Judy Moody and the Not Bummer Summer" 192 }, 193 { 194 "title": "I Still Know What You Did Last Summer" 195 }]