--- title: "Database — MongoDB (Mongoose Adapter)" aliases: [payload-mongodb, mongoose-adapter, payload-mongo] tags: [payloadcms, mongodb, mongoose, database] sources: [raw/database__mongodb.md] created: 2026-05-15 updated: 2026-05-15 --- ## Setup Install and wire up `@payloadcms/db-mongodb`: ```ts import { mongooseAdapter } from '@payloadcms/db-mongodb' export default buildConfig({ db: mongooseAdapter({ url: process.env.DATABASE_URL, // required }), }) ``` --- ## Adapter Options | Option | Default | Notes | |--------|---------|-------| | `url` | — | **Required.** MongoDB connection string | | `autoPluralization` | — | Auto-pluralize singular collection slugs | | `bulkOperationsSingleTransaction` | `false` | Process bulk ops one-at-a-time; fixes DocumentDB/Cosmos DB transaction limits | | `connectOptions` | — | Override Mongoose connection options | | `collectionsSchemaOptions` | — | Customize Mongoose schema per collection | | `disableIndexHints` | `false` | Disable `id` index hint for pagination count; fixes AWS DocumentDB issues | | `migrationDir` | — | Custom directory for migration files | | `transactionOptions` | — | Configure or disable (`false`) transactions | | `collation` | — | Language-specific string sorting (MongoDB 3.4+), locale auto-threaded from request | | `allowAdditionalKeys` | `false` | Allow extra MongoDB fields not in Payload schema — **access control won't apply** | | `allowIDOnCreate` | `false` | Use caller-supplied `id` on create without a custom ID field | | `disableFallbackSort` | `false` | Disable fallback sort on non-unique fields (may break consistent ordering) | | `useAlternativeDropDatabase` | `false` | Use `deleteMany({})` per collection instead of raw `dropDatabase` (testing only) | | `useBigIntForNumberIDs` | `false` | Use `BigInt` for `'number'`-type custom IDs (for DBs that don't support double/int32) | | `useJoinAggregations` | `true` | Use correlated subqueries for join fields; set `false` for multiple `find` fallback | | `usePipelineInSortLookup` | `true` | Use `pipeline` in `$lookup` aggregation for sorting | --- ## Accessing Mongoose Models Directly After `payload.init()`, models are exposed on the adapter: ```ts // Collection model payload.db.collections['posts'] // Globals model payload.db.globals // Versions (collections or globals) payload.db.versions['posts'] ``` --- ## Alternative MongoDB Implementations Import `compatibilityOptions` for pre-configured settings for DocumentDB, Cosmos DB, and Firestore: ```ts import { mongooseAdapter, compatibilityOptions } from '@payloadcms/db-mongodb' export default buildConfig({ db: mongooseAdapter({ url: process.env.DATABASE_URL, ...compatibilityOptions.firestore, // or .documentDB / .cosmosDB }), }) ``` **Known limitations:** - **Azure Cosmos DB** — does not support transactions across multiple collections (common in Payload hooks); requires `indexSortableFields: true` at root config - DocumentDB and Firestore may still have issues despite compatibility presets --- ## Collation (Language-Aware Sorting) Enable locale-sensitive string comparison: ```ts db: mongooseAdapter({ url: process.env.DATABASE_URL, collation: { strength: 1, // case/accent insensitivity level // locale is auto-set from request }, }) ``` - Affects sort order — test thoroughly before production - Locale is threaded automatically from the request context --- ## Key Takeaways - MongoDB adapter is the original Payload DB; install `@payloadcms/db-mongodb` - `url` is the only required option; all others are opt-in overrides - Direct Mongoose model access via `payload.db.collections[slug]` enables raw queries when needed - `bulkOperationsSingleTransaction: true` + `disableIndexHints: true` for DocumentDB/Cosmos DB compatibility - `allowAdditionalKeys: true` bypasses Payload's schema stripping **and access control** — use with care - Azure Cosmos DB requires extra config (`indexSortableFields: true`, no cross-collection transactions) - Collation enables proper multilingual sorting but must be tested before production rollout --- ## Related - [[wiki/payloadcms/database-indexes|Database Indexes]] — single-field and compound index config - [[wiki/payloadcms/database-migrations|Database Migrations]] — migration CLI, Postgres-focused but covers shared concepts - [[wiki/payloadcms/configuration|Payload Config — Overview]] — root `buildConfig` where `db` is wired - [[wiki/payloadcms/queries|Queries]] — where/sort/pagination options used against MongoDB - [[wiki/payloadcms/localization|Localization]] — locale threading that feeds MongoDB collation --- ## Sources - `raw/database__mongodb.md` — compiled from [payloadcms.com/docs/database/mongodb](https://payloadcms.com/docs/database/mongodb)