MongoDB
要在 Payload 中使用 MongoDB,请安装 @payloadcms/db-mongodb
包。该包包含了将 Payload 数据存储到 MongoDB 所需的所有功能。
然后,将其传递给你的 Payload 配置,如下所示:
import { mongooseAdapter } from '@payloadcms/db-mongodb'
export default buildConfig({
// 你的配置写在这里
collections: [
// 集合写在这里
],
// 在这里配置 Mongoose 适配器
db: mongooseAdapter({
// Mongoose 特定参数写在这里
// URL 是必填项
url: process.env.DATABASE_URI,
}),
})
选项
Option | 描述 |
---|---|
autoPluralization | 当遇到使用单数单词作为 collection slug 时,告诉 Mongoose 自动将其复数化。 |
connectOptions | 自定义 MongoDB 连接选项。Payload 会使用默认选项连接你的 MongoDB 数据库,你可以覆盖并扩展这些选项,包含所有 mongoose 可用的选项。 |
collectionsSchemaOptions | 为 collections 自定义 Mongoose schema 选项。 |
disableIndexHints | 设置为 true 可禁用 MongoDB 使用 'id' 作为索引的提示。当前在分页计数文档时会进行此操作,因为它能提高该查询中计数函数的速度。禁用此优化可能解决 AWS DocumentDB 的一些问题。默认为 false |
migrationDir | 自定义存储迁移文件的目录。 |
transactionOptions | 一个包含事务配置属性的对象,或设为 false 将禁用事务功能。 |
collation | 启用支持语言特性的字符串比较,可自定义选项。适用于 MongoDB 3.4+ 版本。默认 locale 为 "en"。示例:{ strength: 3 } 。完整的 collation 选项列表及其定义,请参阅 MongoDB 文档。 |
allowAdditionalKeys | 默认情况下,Payload 会从 MongoDB 数据中剥离所有不在 Payload schema 中的额外键。如果你想包含一些不存在于 Payload 中的数据,可以将其设为 true 。请注意,Payload 的访问控制将_不会_作用于这些数据。 |
allowIDOnCreate | 设置为 true 可在创建 API 操作时使用传入数据中的 id ,而无需使用自定义 ID 字段。 |
访问 Mongoose 模型
Payload 初始化后,该适配器会暴露所有 Mongoose 模型,你可以直接使用它们。
你可以通过以下方式访问 Mongoose 模型:
- 集合模型 -
payload.db.collections[myCollectionSlug]
- 全局模型 -
payload.db.globals
- 版本模型(包括集合和全局) -
payload.db.versions[myEntitySlug]
使用其他 MongoDB 实现
DocumentDB 和 Azure Cosmos DB 的限制:
- 对于 Azure Cosmos DB,你必须在适配器选项中传递
transactionOptions: false
。Azure Cosmos DB 不支持更新不同集合中两个及以上文档的事务,而这在使用 Payload(通过 hooks)时是常见情况。 - 对于 Azure Cosmos DB,根配置属性
indexSortableFields
必须设置为true
。 - Join 字段 在 DocumentDB 和 Azure Cosmos DB 中不受支持,因为我们内部使用 MongoDB 聚合来查询该字段的数据,而这些功能在这些数据库中受限。未来可能会改变这一点。
- 对于 DocumentDB,传递
disableIndexHints: true
以禁用提示数据库使用id
作为索引,这可能会导致 DocumentDB 出现问题。