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 实现

DocumentDBAzure 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 出现问题。