The data source manager (DataSourceManager instance) for managing and accessing multiple data sources (e.g. main main, logging logging). Use when you have multiple data sources or need cross–data-source metadata access.
| Scenario | Description |
|---|---|
| Multiple data sources | Enumerate all data sources, get one by key |
| Cross–data-source access | When context doesn’t know the data source, access by “data source key + collection name” |
| Field by full path | Get field definition with path format dataSourceKey.collectionName.fieldPath |
Note: If you only work with the current data source, use
ctx.dataSource; usectx.dataSourceManagerwhen you need to enumerate or switch data sources.
| Need | Recommended |
|---|---|
| Single data source for context | ctx.dataSource |
| Entry to all data sources | ctx.dataSourceManager |
| List or switch data sources | ctx.dataSourceManager.getDataSources() / getDataSource(key) |
| Collection in current data source | ctx.dataSource.getCollection(name) |
| Collection in another data source | ctx.dataSourceManager.getCollection(dataSourceKey, collectionName) |
| Field in current data source | ctx.dataSource.getCollectionField('users.profile.avatar') |
| Field across data sources | ctx.dataSourceManager.getCollectionField('main.users.profile.avatar') |
getCollectionField path format is dataSourceKey.collectionName.fieldPath; first segment is data source key, then collection name and field path.getDataSource(key) returns undefined if the data source doesn’t exist—check before use.addDataSource throws if key already exists; upsertDataSource overwrites or adds.