Docs Menu
Docs Home
/ /
Atlas App Services

MongoDB データソース構成ファイル

項目一覧

  • サービス構成
  • MongoDB クラスター
  • フェデレーティッドデータベースインスタンス
  • データベースとコレクション
  • コレクション スキーマ
  • 関係
  • デフォルト ルール
  • コレクション ルール
  • ルール構成
  • ロール
  • フィルター

注意

このページでは、レガシー構成ファイル形式について説明します。 非推奨の realm-cliを使用している場合にのみ、この情報を使用する必要があります。

App Services CLI を使用してプルする構成ファイル、または UI からエクスポートする構成ファイルには、最新の構成バージョンが使用されます。 現在の構成ファイル形式の詳細については、 「アプリ構成」 を参照してください。

app/
└── data_sources/
└── <service name>/
├── config.json
└── <database>/
└── <collection>/
├── schema.json
├── relationships.json
└── rules.json
config.json
{
"name": "<Service Name>",
"type": "mongodb-atlas",
"config": {
"clusterName": "<Atlas Cluster Name>",
"readPreference": "<Read Preference>",
"wireProtocolEnabled": <Boolean>
}
}
フィールド
説明
name
String

必須。デフォルト: mongodb-atlas

この Atlas App Services アプリ内のクラスターを参照するために使用されるサービス名。 名前の長さは最大 64 文字で、ASCII 文字、数字、アンダースコア、ハイフンのみを含めることができます。

type
String
必須。 MongoDB Atlas クラスターの場合、この値は常に"mongodb-atlas"です。
config.clusterName
String
必須。 Atlas 内のクラスターの名前。
config.readPreference
String

サービスを通じて送信されたクエリの 読み込み設定( read preference ) モード

モード
説明
プライマリ
App Services はすべての読み取り操作を現在のレプリカセットプライマリ ノードにルーティングします。 これは、デフォルトの読み込み設定 (read preference) モードです。
App Services は、すべての読み取り操作を現在のレプリカセットのプライマリ ノードにルーティングします(使用可能な場合)。 自動フェイルオーバー中などプライマリが使用できない場合は、代わりに読み取りリクエストはセカンダリ ノードにルーティングされます。
App Services は、すべての読み取り操作を現在のレプリカセットのセカンダリ ノードの 1 つにルーティングします。
App Services は、すべての読み取り操作をレプリカセットの使用可能なセカンダリ ノードの 1 つにルーティングします。 セカンダリが使用できない場合、読み取りリクエストは代わりにレプリカセットのプライマリにルーティングされます。
App Services は、クライアントと比較してネットワーク レイテンシが最も低いレプリカセット メンバーに読み取り操作をルーティングします。
config.wireProtocolEnabled
Boolean
/data_sources/<Service Name>/config.json
{
"name": "<Service Name>",
"type": "datalake",
"config": {
"dataLakeName": "<Federated database instance name>"
}
}
フィールド
説明
name
String

必須。デフォルト: mongodb-datafederation

このApp Services App内のフェデレーティッドデータベースインスタンスを参照するために使用されるサービス名。 名前の長さは最大 64 文字で、ASCII 文字、数字、アンダースコア、ハイフンのみを含めることができます。

type
String
必須。 フェデレーティッドデータベースインスタンスの場合、この値は常に"datalake"です。
config.dataLakeName
String
必須。 Atlas 内のフェデレーティッドデータベースインスタンスの名前。

コレクションにスキーマを適用する場合は、ドキュメントのJSON schemaを含む schema.json 構成ファイルを定義します。 ルート レベル スキーマは、次の形式を持つオブジェクト スキーマである必要があります。

/data_sources/<data source>/<database>/<collection>/schema.json
{
"title": "<Object Type Name>",
"bsonType": "object",
"properties": {
"<Property Name>": { <Schema> },
...
}
}
/data_sources/[data<data source> <database><collection>source]/[database]/[collection]/relationships.json
{
"<Source Field Name>": {
"ref": "#/relationship/<Data Source Name>/<Database Name>/<Collection Name>",
"source_key": "<Source Field Name>",
"foreign_key": "<Foreign Field Name>",
"is_list": <Boolean>
},
...
}
フィールド
説明
ref
String

外部コレクションを指定する JSON schema $ref string 。 string の形式は次のとおりです。

#/relationship/<Data Source Name>/<Database Name>/<Collection Name>
source_key
String
外部コレクション内のどのドキュメントを関係に含めるかを指定する、このコレクションのスキーマ内のフィールドの名前。 source_keyforeign_keyフィールドの値が含まれている場合、外部ドキュメントが含まれます。
foreign_key
String
source_keyが参照する値を含む外部コレクションのスキーマ内のフィールドの名前。
is_list
Boolean

trueの場合、関係は複数の外部ドキュメントを参照する可能性があります(「to-many」の関係)。 source_keyフィールドは、 foreign_keyフィールドと同じ型の要素を含む配列である必要があります。

falseの場合、関係は 0 または 1 つの外部ドキュメントを参照できます(つまり「to-1」の関係)。 source_keyフィールドはforeign_keyフィールドと同じタイプである必要があります。

eコマース アプリは、2 つのコレクション間の関係を定義します。 store.orders内の各ドキュメントは、注文のitems配列にアイテム_idの値を含めることで、 store.itemsコレクション内の 1 つ以上のドキュメントを参照します。 どちらのコレクションも同じ連結クラスター( mongodb-atlas )とデータベース( store )内にあります。

この関係はordersコレクションに対して定義されています。

/data_sources/mongodb-atlas/store/orders/relationships.json
{
"items": {
"ref": "#/relationship/mongodb-atlas/store/items",
"source_key": "items",
"foreign_key": "_id",
"is_list": true
}
}

より具体的なコレクション レベルのルールが定義されていないデータソース内の、すべてのコレクションに適用するデフォルト ルールを定義できます。

データソースのdefault_rule.json構成ファイルでdata_sources/<data-source-name>/default_rule.jsonでデフォルト ルールを定義します。

/data_sources/<data source>/default_rule.json
{
"roles": [<Role>],
"filters": [<Filter>]
}
フィールド
説明
roles
Array<Role>
ロール構成の配列。
filters
Array<Filter>
フィルター構成の配列。

データソースがフェデレーティッド データソースでない場合は、コレクションのrules.json構成ファイルでコレクションレベルのルールを定義できます。

/data_sources/<data source>/<database>/<collection>/rules.json
{
"database": "<Database Name>",
"collection": "<Collection Name>",
"roles": [<Role>],
"filters": [<Filter>]
}
フィールド
説明
database
String
コレクションを保持するデータベースの名前。
collection
String
コレクションの名前。
roles
Array<Role>
ロール構成の配列。
filters
Array<Filter>
フィルター構成の配列。
{
"name": "<Role Name>",
"apply_when": { Expression },
"document_filters": {
"read": { Expression },
"write": { Expression }
},
"read": { Expression },
"write": { Expression },
"insert": { Expression },
"delete": { Expression },
"search": <Boolean>,
"fields": {
"<Field Name>": {
"read": { Expression },
"write": { Expression },
"fields": { Embedded Fields }
},
...
},
"additional_fields": {
"read": { Expression },
"write": { Expression }
}
}
フィールド
説明
name
string
ロールの名前。 ロール名は、同じコレクション内のロールを識別して区別します。 100 文字以下に制限します。
apply_when
object

この ロール がユーザーに適用される場合に true と評価される 式 。

Device Sync(フレキシブルモード)が有効になっていない場合、App Services はドキュメントごとにロールを割り当てます。 Device Sync(フレキシブルモード)が有効になっている場合、App Services はコレクションごと、セッションごとに、つまりクライアントが同期接続を開くときに同期されたコレクションごとにロールを割り当てます。

ロールを割り当てるために、App Services は、1 つのロールが true と評価されるまで、各潜在的なロールのapply_whenを評価します。 潜在的なロールとは、特定のコレクションのrules.json構成ファイルで指定されたロールであり、特定のコレクションにrules.jsonファイルが見つからない場合は、デフォルトのロールです。 App Services は、構成で指定した順序でロールを評価します。 一致するロールがない場合、アクセスは拒否されます。 詳細については、「ロールベースの権限 」を参照してください。

Device Sync(フレキシブルモード)が有効な場合、割り当てられたロールはSync に互換性がなければなりません。 ロールが同期に互換性がないが、 apply_whenが true と評価された場合、他のロールは考慮されません。アクセスは拒否されます。

document_filters
Document
Default: undefined

ロールの他の権限を評価できるかどうかを決定する読み取り式と書込み式を含むドキュメント。

Device Sync が有効な場合、ロールを Sync と互換性document_filters.read document_filters.writeのある にするには、 と の両方を定義する 必要 があります。同期と互換性のないロールでは、同期リクエストへのすべてのアクセスが拒否されます。

Device Sync が有効になっていない場合、 document_filtersdocument_filters.readdocument_filters.writeはすべて任意です。未定義のdocument_filters.readまたはdocument_filters.writeはデフォルトで true になり、後続の権限を評価できます。

"document_filters": {
"read": { Expression },
"write": { Expression }
}
document_filters.read
object?
Default: undefined

readfieldsの読み取り権限、 additional_fieldsの読み取り権限 を評価できるかどうかを指定する。 false の場合(かつdocument_filters.writeが未定義または false の場合)、ドキュメント全体の読み取りアクセスは拒否されます。

同期の互換性を維持するには、 式は定義する必要があります。この式はクエリ可能なフィールドのみを参照できます。

document_filters.write
object?
Default: undefined

writefieldsの書込み権限、 additional_fieldsの書込み権限 を評価できるかどうかを指定する。 false の場合、ドキュメント全体の書込みアクセスが拒否されます。

同期の互換性を維持するには、 式は定義する必要があります。この式はクエリ可能なフィールドのみを参照できます。

read
object?
Default: undefined

ロールがドキュメント内のすべてのフィールドを読み取る権限を持つ場合に true と評価される

同期の互換性を維持するには、式はブール値のリテラル( trueまたはfalseのいずれか)である必要があります。

ドキュメントレベルの読み取り権限は、フィールドレベルの権限よりも優先されます。 ロールにドキュメントレベルのread権限がある場合、ドキュメント内のすべてのフィールドに適用されます。 fieldsまたはadditional_fieldsで指定された読み取り権限は、ドキュメントレベルのread権限を上書きしません。

フィールドレベルのルールと並行してデフォルトのフォールバックを定義するには、 readを未定義のままにし、 additional_fieldsを使用します。

write
object?
Default: undefined

ロールがドキュメント内のすべてのフィールドを追加、変更、または削除する権限を持つ場合に true と評価される

同期の互換性を維持するには、式はブール値のリテラル( trueまたはfalseのいずれか)である必要があります。

ドキュメントレベルの書込み権限は、フィールドレベルの権限よりも優先されます。 ロールにドキュメントレベルのwrite権限がある場合、ドキュメント内のすべてのフィールドに適用されます。 fieldsまたはadditional_fieldsで指定された書込み権限は、ドキュメントレベルのwrite権限を上書きしません。

フィールドレベルのルールと並行してデフォルトのフォールバックを定義するには、 writeを未定義のままにし、 additional_fieldsを使用します。

write JSON 式では、 %%root%%prevRootなどの展開を使用できます。

重要

暗黙的な読み取り権限

ロールが特定のスコープに対してwrite権限を持つたびに、明示的に定義されていない場合でも、 read権限も付与されます。

insert
object?
Default: true

ロールに新しいドキュメントをコレクションに挿入する権限がある場合は、 trueと評価される

Atlas App Services は、挿入操作でのみ、および新しいドキュメントのすべてのフィールドに対してwrite権限があると判断した後にのみ、この式を評価します。

delete
object?
Default: true

ロールがコレクションからドキュメントを削除する権限を持つ場合に true と評価される

App Services は、削除操作でのみ、および削除されるドキュメント内のすべてのフィールドに対してロールがwrite権限を持っていると判断した後にのみ、この式を評価します。

search
Boolean
Default: true

ロールが Atlas Search を使用してコレクションを検索する権限を持っている場合に true と評価される 式 。

重要

App Services はシステムユーザーとして$search操作を実行し、返された検索結果に対してフィールドレベルのルールを適用します。 つまり、ユーザーは読み取りアクセス権のないフィールドを検索できます。 この場合、検索は指定された フィールドに基づいて行われますが、返されたドキュメントには フィールドが含まれません。

fields
Document
Default: {}

各キーがフィールド名に対応し、各値がクエリされたドキュメント内の対応するフィールドに対するロールのフィールドレベルのreadおよびwrite権限を定義するドキュメント。

同期の互換性を維持するには、内部のread式とwrite式はブール値のリテラル( trueまたはfalseのいずれか)である必要があります。

"fields": {
"<Field Name>": {
"read": { Expression },
"write": { Expression },
"fields": <Fields Document>
},
...
}

注意

権限の優先順位

ドキュメントレベルのreadまたはwrite権限は、同じタイプのすべてのフィールドレベル権限を上書きします。 埋め込みドキュメントを含むフィールドに対して権限が定義されている場合、それらの権限はドキュメントの埋め込みフィールドに定義された権限を上書きします。

fields.<Field Name>.read
object?
Default: false

ロールにフィールドを読み取る権限がある場合は true と評価される

同期の互換性を維持するには、式はブール値のリテラル( trueまたはfalseのいずれか)である必要があります。

fields.<Field Name>.write
object?
Default: false

ロールにフィールドを追加、変更、または削除する権限がある場合は true と評価される

同期の互換性を維持するには、式はブール値のリテラル( trueまたはfalseのいずれか)である必要があります。

fields.<Field Name>.fields
Document
Default: {}

クエリされたドキュメントのこのフィールドに埋め込まれたフィールドに対するreadwrite権限を定義するfieldsドキュメント。

詳細については、「埋め込みドキュメントに対するフィールドレベルの権限 」ロール パターンを参照してください。

additional_fields
Document
Default: {}

fieldsドキュメントで明示的に定義された権限を持たない、クエリされたドキュメント内のフィールドに対するロールのフィールドレベルのread権限とwrite権限を定義するドキュメント。

同期の互換性を維持するには、内部のread式とwrite式はブール値のリテラル( trueまたはfalseのいずれか)である必要があります。

"additional_fields": {
"read": { Expression },
"write": { Expression }
}
additional_fields.read
object?
Default: false

fieldsにフィールドレベルの権限定義がないフィールドを読み取る権限がある場合に true と評価される

同期の互換性を維持するには、式はブール値( trueまたはfalseのいずれか)である必要があります。

additional_fields.write
object?
Default: false

fieldsにフィールドレベルの権限定義がないフィールドを追加、変更、または削除する権限がある場合に true と評価される

同期の互換性を維持するには、式はブール値( trueまたはfalseのいずれか)である必要があります。

{
"name": "<Filter Name>",
"apply_when": { Expression },
"query": { MongoDB Query },
"projection": { MongoDB Projection }
}
フィールド
説明
name
string
必須。 フィルターの名前。 フィルター名は、フィルターを識別して区別するのに役立ちます。 100 文字以下に制限します。
apply_when
object

このフィルターが受信 MongoDB 操作に適用されるタイミングを決定する

重要

Atlas App Services はドキュメントを読み取る前にフィルターを評価して適用するため、フィルターの Apply When 式でMongoDB ドキュメント展開を使用することはできません。ただし、 %%user%%values%functionなどの他の展開を使用することはできます。

query
object
Default: {}

App Services がフィルタリングされた操作の既存のクエリにマージするMongoDB クエリ

フィルターは、次のクエリを使用して、score20 より低いドキュメントを除外します。

{ "score": { "$gte": 20 } }
projection
object
Default: {}

App Services がフィルタリングされた操作の既存のプロジェクションに統合するMongoDB プロジェクション

重要

プロジェクションの競合

MongoDB プロジェクションには包括的と排他的のいずれかのプロジェクションががあります。つまり、指定されたフィールドのみを返すか、指定されていないフィールドを除外することができます。 クエリに複数のフィルターを適用する場合、フィルターはすべて同じプロジェクション タイプを指定する必要があります。そうしないと、クエリは失敗します。

フィルターは、次のプロジェクションを使用するすべてのドキュメントから_internalフィールドを除外します。

{ "_internal": 0 }

次へ

Atlas アプリケーション サービスとは