Docs Menu
Docs Home
/
Atlas
/ /

MongoDB ビューを使用してドキュメントを変換し、Atlas Search 用のコレクションをフィルタリングする

項目一覧

  • 要件
  • 制限
  • 例: ドキュメントのフィルタリング
  • 例: フィールドの追加または変更
  • ビューを編集する
  • ビューのパイプラインを返します
  • トラブルシューティング
  • インデックス プロセス
  • 詳細

ビューに Atlas Search インデックスを作成することで、ドキュメントやコレクションを変換し、コレクションの部分的なインデックス化、互換性のないデータ型やデータモデルのサポートなどを可能にします。

注意

MongoDB ビューと Atlas Search の使用はプレビュー機能としてご利用いただけます。機能および関連するドキュメントは、プレビュー期間中にいつでも変更される可能性があります。

以下の例では、sample_mflix および sample_airbnb サンプル データベースを使用します。

注意

曖昧さ回避

このページでは標準ビューについて説明します。オンデマンドのマテリアライズドビューの詳細については、「オンデマンドのマテリアライズドビュー」を参照してください。

ビュー タイプの違いについては「オンデマンドのマテリアライズドビューとの比較」を参照してください。

以下の使用が必須です:

  • MongoDB 8.0 以降

プレビュー期間中に、以下を使用する必要があります。

ビューを編集するには、ユーザー管理者ロールを持ち、collMod データベース コマンドを使用する必要があります。

ビューを作成するには、createCollection の権限が必要です。

コレクションを部分的にインデックスして、ドキュメントをフィルタリングすることができます。次の例では、sample_mflix.movies コレクションにビューを作成し、2000 年 1 月 1 日以降に公開された映画のみを検索できるようにします。

1

詳しくは、「 mongosh経由で接続 」を参照してください。

2
use sample_mflix
3
db.createView(
"movies_ReleasedAfter2000",
"movies",
[
{
$match: {
$expr: {
$gt: [
"$released",
ISODate("2000-01-01")
]
}
}
}
]
)
4

警告

ナビゲーションの改善が進行中

現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。

  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ Clusters (クラスター) ] ページが表示されます。

5

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

    クラスターがない場合は、Create clusterをクリックしてクラスターを作成してください。詳細については、「 クラスターの作成 」を参照してください。

  2. プロジェクトに複数のクラスターがある場合は、Select cluster ドロップダウンから使用するクラスターを選択し、Go to Atlas Search をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

6
7

ページで次の選択を行い、Next をクリックしてください。

Search Type

Atlas Search のインデックスタイプを選択します。

Index Name and Data Source

以下の情報を指定してください。

  • Index Name: releasedAfter2000Index

  • Database and Collection:

    • sample_mflix

    • movies_ReleasedAfter2000

Configuration Method

For a guided experience, select Visual Editor.

To edit the raw index definition, select JSON Editor.

注意

Atlas Searchインデックスの名前は、デフォルトで default です。この名前を維持する場合、インデックスは、演算子に別の index オプションを指定していない Atlas Search クエリのデフォルトの検索インデックスになります。複数のインデックスを作成する場合は、インデックス間で一貫した記述的な命名規則を維持することをお勧めします。

8

Atlas はインデックスが構築中であることを知らせるトースト(短時間の非インタラクティブ通知)を表示します。

9

新規作成したインデックスは Atlas Search タブに表示されます。インデックスを作成する間、Status フィールドには Build in Progress と表示されます。インデックスの作成が完了すると、Status フィールドの表示は Active になります。

注意

コレクションが大きいほど、インデックスの作成に時間がかかります。インデックスの作成が完了すると、メール通知が届きます。

10

注意

次の例では、movies のソースコレクションに対して .aggregate コマンドを実行し、releasedAfter2000Index インデックスをクエリします。プレビュー期間中は、ビューのソースコレクション(movies)を使用して、ビューで作成された検索インデックスをクエリする必要があります。ビュー(movies_ReleasedAfter2000)をクエリすると、Atlas Search は結果を返しません。

use sample_mflix
1db.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 に変換します。

1

詳しくは、「 mongosh経由で接続 」を参照してください。

2
use sample_airbnb
3
db.createView(
"listingsAndReviews_totalPrice",
"listingsAndReviews",
[
{
$addFields: {
totalPrice: {
$add: [
{
$ifNull: [{ $toDouble: "$price" }, 0]
},
{
$ifNull: [{ $toDouble: "$cleaning_fee" }, 0]
}
]
}
}
}
]
)
4

警告

ナビゲーションの改善が進行中

現在、新しく改善されたナビゲーション エクスペリエンスを展開しています。次の手順が Atlas UIのビューと一致しない場合は、プレビュー ドキュメントを参照してください。

  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ Clusters (クラスター) ] ページが表示されます。

5

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

    クラスターがない場合は、Create clusterをクリックしてクラスターを作成してください。詳細については、「 クラスターの作成 」を参照してください。

  2. プロジェクトに複数のクラスターがある場合は、Select cluster ドロップダウンから使用するクラスターを選択し、Go to Atlas Search をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

6
7

ページで次の選択を行い、Next をクリックしてください。

Search Type

Atlas Search のインデックスタイプを選択します。

Index Name and Data Source

以下の情報を指定してください。

  • Index Name: totalPriceIndex

  • Database and Collection:

    • sample_airbnb

    • listingsAndReviews_totalPrice

Configuration Method

For a guided experience, select Visual Editor.

To edit the raw index definition, select JSON Editor.

注意

Atlas Searchインデックスの名前は、デフォルトで default です。この名前を維持する場合、インデックスは、演算子に別の index オプションを指定していない Atlas Search クエリのデフォルトの検索インデックスになります。複数のインデックスを作成する場合は、インデックス間で一貫した記述的な命名規則を維持することをお勧めします。

8
  1. 次のインデックス定義を指定します。

    {
    "mappings": {
    "dynamic": true
    },
    "storedSource": {
    "include": [
    "totalPrice"
    ]
    }
    }
  2. [Next] をクリックします。

9

Atlas はインデックスが構築中であることを知らせるトースト(短時間の非インタラクティブ通知)を表示します。

10

新規作成したインデックスは Atlas Search タブに表示されます。インデックスを作成する間、Status フィールドには Build in Progress と表示されます。インデックスの作成が完了すると、Status フィールドの表示は Active になります。

注意

コレクションが大きいほど、インデックスの作成に時間がかかります。インデックスの作成が完了すると、メール通知が届きます。

11

注意

次の例では、listingsAndReviews のソースコレクションに対して .aggregate コマンドを実行し、totalPriceIndex インデックスをクエリします。プレビュー期間中は、ビューのソースコレクション(listingsAndReviews)を使用して、ビューで作成された検索インデックスをクエリする必要があります。ビュー(listingsAndReviews_totalPrice)をクエリすると、Atlas Search は結果を返しません。

use sample_airbnb
1db.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 ビューのパイプラインを返します。

1db.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プロセス:

  1. コレクションのインデックス定義のルールに基づいて Atlas Search インデックスを作成します。

  2. Atlas Search インデックスを定義したコレクションについて、ドキュメントとインデックスの現在の状態に関する変更ストリームをモニターします。

  3. Atlas Search クエリを処理し、一致するドキュメントのドキュメント ID とその他の検索メタデータをmongodに返します。その後、ドキュメント全体が検索され、その結果がクライアントに返されます。

ビューで Atlas Search インデックスを作成すると、ステップ 1 と 2 の間にビュー定義が適用され、変換されたドキュメントはディスク上の Atlas Search インデックスに保存されます。

ビューの詳細については、「ビュー」を参照してください。

ビューに Atlas Vector Search インデックスを作成するには、「MongoDB ビューを使用して Atlas Vector Search のドキュメントを変換しコレクションをフィルタリングする」を参照してください。

戻る

returnStoredSource