MongoDB ビューを使用してドキュメントを変換し、Atlas Search 用のコレクションをフィルタリングする
ビューに Atlas Search インデックスを作成することで、ドキュメントやコレクションを変換し、コレクションの部分的なインデックス化、互換性のないデータ型やデータモデルのサポートなどを可能にします。
注意
MongoDB ビューと Atlas Search の使用はプレビュー機能としてご利用いただけます。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。
以下の例では、sample_mflix および sample_airbnb サンプル データベースを使用します。
注意
曖昧さ回避
このページでは標準ビューについて説明します。オンデマンドのマテリアライズドビューの詳細については、「オンデマンドのマテリアライズドビュー」を参照してください。
ビュー タイプの違いについては「オンデマンドのマテリアライズドビューとの比較」を参照してください。
要件
以下の使用が必須です:
MongoDB 8.0 以降
プレビュー期間中に、以下を使用する必要があります。
制限
Atlas Search は、以下のステージで
$expr
のビューのみをサポートしています。インデックス名は、ソース コレクションとそのすべてのビューにわたって一意である必要があります。
Atlas Searchでは、 $$USER_ROLES システム変数や $and集計演算子など、動的結果を生成する演算子を使用したビュー定義はサポートされていません。
Atlas Search クエリは、ソースコレクションにある元のドキュメントをそのまま返します。
例: ドキュメントのフィルタリング
ビューを作成するには、createCollection
の権限が必要です。
コレクションを部分的にインデックスして、ドキュメントをフィルタリングすることができます。次の例では、sample_mflix.movies
コレクションにビューを作成し、2000 年 1 月 1 日以降に公開された映画のみを検索できるようにします。
mongosh
を使用して Atlas クラスターに接続します。
詳しくは、「 mongosh
経由で接続 」を参照してください。
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoClusters
警告
ナビゲーションの改善が進行中
現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
インデックスの設定を開始します。
ページで次の選択を行い、Next をクリックしてください。
Search Type | Atlas Search のインデックスタイプを選択します。 |
Index Name and Data Source | 以下の情報を指定してください。
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
注意
Atlas Searchインデックスの名前は、デフォルトで default
です。この名前を維持する場合、インデックスは、演算子に別の index
オプションを指定していない Atlas Search クエリのデフォルトの検索インデックスになります。複数のインデックスを作成する場合は、インデックス間で一貫した記述的な命名規則を維持することをお勧めします。
releasedAfter2000Index
部分インデックスにクエリを実行します。
注意
次の例では、movies
のソースコレクションに対して .aggregate
コマンドを実行し、releasedAfter2000Index
インデックスをクエリします。プレビュー期間中は、ビューのソースコレクション(movies
)を使用して、ビューで作成された検索インデックスをクエリする必要があります。ビュー(movies_ReleasedAfter2000
)をクエリすると、Atlas Search は結果を返しません。
use sample_mflix
1 db.movies.aggregate([ 2 { 3 $search: { 4 index: "releasedAfter2000Index", 5 text: { 6 path: "title", 7 query: "foo" 8 }, 9 sort: { 10 released: 1 11 } 12 } 13 } 14 ])
[ { _id: ObjectId('573a13d2f29313caabd929f8'), plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo ...", genres: [ 'Documentary', 'Music' ], runtime: 150, cast: [ 'Shawn Cloninger', 'William Goldsmith', 'Jessy Greene', 'Dave Grohl' ], num_mflix_comments: 0, poster: 'https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZTcwNTU1NjQxOA@@._V1_SY1000_SX677_AL_.jpg', title: 'Foo Fighters: Back and Forth', fullplot: `Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo tapes through the creation of their 2011 album, "Wasting Light."`, languages: [ 'English' ], released: ISODate('2011-04-05T00:00:00.000Z'), directors: [ 'James Moll' ], awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' }, lastupdated: '2015-08-19 00:00:25.937000000', year: 2011, imdb: { rating: 8.4, votes: 3745, id: 1853563 }, countries: [ 'USA' ], type: 'movie', tomatoes: { viewer: { rating: 4.4, numReviews: 857, meter: 96 }, dvd: ISODate('2011-08-08T00:00:00.000Z'), website: 'http://us.foofightersfilm.com/', production: 'Cinedigm Digital Cinema', lastUpdated: ISODate('2015-09-12T18:42:01.000Z') } } ]
例: フィールドの追加または変更
次の例では、新しい totalPrice
フィールド(price
フィールドと cleaningFee
フィールドの合計)に基づいて、sample_airbnb.listingsAndReviews
コレクションで宿泊施設を検索できます。また、Atlas Search は Decimal128
型をサポートしていないため、値を Double
に変換します。
mongosh
を使用して Atlas クラスターに接続します。
詳しくは、「 mongosh
経由で接続 」を参照してください。
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
警告
ナビゲーションの改善が進行中
現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
インデックスの設定を開始します。
ページで次の選択を行い、Next をクリックしてください。
Search Type | Atlas Search のインデックスタイプを選択します。 |
Index Name and Data Source | 以下の情報を指定してください。
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
注意
Atlas Searchインデックスの名前は、デフォルトで default
です。この名前を維持する場合、インデックスは、演算子に別の index
オプションを指定していない Atlas Search クエリのデフォルトの検索インデックスになります。複数のインデックスを作成する場合は、インデックス間で一貫した記述的な命名規則を維持することをお勧めします。
totalPriceIndex
インデックスにクエリを実行します。
注意
次の例では、listingsAndReviews
のソースコレクションに対して .aggregate
コマンドを実行し、totalPriceIndex
インデックスをクエリします。プレビュー期間中は、ビューのソースコレクション(listingsAndReviews
)を使用して、ビューで作成された検索インデックスをクエリする必要があります。ビュー(listingsAndReviews_totalPrice
)をクエリすると、Atlas Search は結果を返しません。
use sample_airbnb
1 db.listingsAndReviews.aggregate([ 2 { 3 $search: { 4 index: "totalPriceIndex", 5 range: { 6 path: "totalPrice", 7 lte: 300 8 }, 9 returnStoredSource: true 10 } 11 } 12 ])
[ { _id: '10006546', totalPrice: 115 }, { _id: '1001265', totalPrice: 215 }, { _id: '10021707', totalPrice: 40 }, { _id: '1003530', totalPrice: 270 }, { _id: '10038496', totalPrice: 269 }, { _id: '10051164', totalPrice: 250 }, { _id: '10057447', totalPrice: 50 }, { _id: '10057826', totalPrice: 205 }, { _id: '10059244', totalPrice: 43 }, { _id: '10066928', totalPrice: 140 }, { _id: '10082422', totalPrice: 60 }, { _id: '10083468', totalPrice: 40 }, { _id: '10084023', totalPrice: 231 }, { _id: '10091713', totalPrice: 231 }, { _id: '10092679', totalPrice: 58 }, { _id: '10096773', totalPrice: 205 }, { _id: '10112159', totalPrice: 90 }, { _id: '10117617', totalPrice: 55 }, { _id: '10120414', totalPrice: 150 }, { _id: '10133554', totalPrice: 121 } ]
ビューを編集する
次の例では、2000 年より前の映画の movies_ReleasedAfter2000
MongoDB ビューを更新します。
db.runCommand( { collMod: "movies_ReleasedAfter2000", viewOn: "movies", "pipeline": [ { $match: { $expr: { $lt: [ "$released", ISODate("2000-01-01T00") ] } } } ] } )
このコマンドを実行すると、Atlas Search はビュー定義の変更を自動的に検出し、ダウンタイムを発生させることなく再インデックス作成を実行します。
ビューのパイプラインを返します
次の例では、movies_ReleasedAfter2000
ビューのパイプラインを返します。
1 db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[ { '$match': { '$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] } } } ]
トラブルシューティング
インデックスは次のシナリオで FAILED
ステータスに変更されます。
Atlas Search と互換性のないビューにインデックスを作成します。
Atlas Search の互換性要件を満たさない方法でビューを編集します。
ビューのソース コレクションを削除または変更します。
たとえば、1 つのビューが別のビュー上に作成され、親ビューのソースを別のコレクションに変更した場合です。
注意
この制限は、ビューが他のビューの子である場合にも適用されます。たとえば、すべての子が由来するソース コレクションを変更または削除することはできません。
インデックスは次のシナリオで停止します。
警告
ビューで定義された集計パイプラインがコレクション内のドキュメントと互換性がない場合、検索レプリケーションは失敗します。たとえば、$toDouble
式が配列を含むドキュメント フィールドに対して操作されると、レプリケーションは失敗します。ビューがコレクション内のすべてのドキュメントでエラーなく動作することを確認してください。
ビュー定義が、インデックスが
READY
のときに集計に失敗すると、インデックスはSTALE
になります。ドキュメントを解決するか、ビュー定義を変更すると、インデックスはREADY
に戻り、失敗しなくなります。しかし、レプリケーションが oplog から自動的に削除されるまでは、インデックスはクエリ可能です。インデックスが
BUILDING
の時にビュー定義によって集計パイプラインに障害が発生した場合、インデックス構築はそのドキュメントが修正されるまで停止します。ドキュメントを解決するか、ビュー定義を変更すると、インデックスはREADY
に戻り、失敗しなくなります。
Atlas UI で「インデックス ステータスの詳細」ページを表示して、インデックス ステータスを確認できます。
インデックス プロセス
ビューで Atlas Search インデックスを作成すると、mongot
プロセスは通常のコレクションで Atlas Search インデックスを作成する場合と同じタスクを実行します。mongot
プロセス:
コレクションのインデックス定義のルールに基づいて Atlas Search インデックスを作成します。
Atlas Search インデックスを定義したコレクションについて、ドキュメントとインデックスの現在の状態に関する変更ストリームをモニターします。
Atlas Search クエリを処理し、一致するドキュメントのドキュメント ID とその他の検索メタデータを
mongod
に返します。その後、ドキュメント全体が検索され、その結果がクライアントに返されます。
ビューで Atlas Search インデックスを作成すると、ステップ 1 と 2 の間にビュー定義が適用され、変換されたドキュメントはディスク上の Atlas Search インデックスに保存されます。
詳細
ビューの詳細については、「ビュー」を参照してください。
ビューに Atlas Vector Search インデックスを作成するには、「MongoDB ビューを使用して Atlas Vector Search のドキュメントを変換しコレクションをフィルタリングする」を参照してください。