MongoDB 适配器

将 Better Auth 与 MongoDB 集成。

MongoDB 是一种流行的 NoSQL 数据库,广泛用于构建可扩展且灵活的应用程序。它提供了灵活的模式,便于数据建模和查询。

在开始之前,请确保您已安装并配置好 MongoDB。更多信息,请参见 MongoDB 文档

安装

要使用 MongoDB 适配器,您需要安装 @better-auth/mongo-adapter 包:

npm install @better-auth/mongo-adapter

示例用法

副本集或分片集群

传入 client,适配器便会默认使用事务。副本集或分片集群请使用相应的连接字符串:

auth.ts
import { betterAuth } from "better-auth";
import { MongoClient } from "mongodb";
import { mongodbAdapter } from "@better-auth/mongo-adapter";

const client = new MongoClient("mongodb://localhost:27017/database");
const db = client.db();

export const auth = betterAuth({
  database: mongodbAdapter(db, {
    client,
  }),
});

发生并发写入同一文档时,MongoDB 会因写冲突中止其中一个事务,并要求应用重试。适配器最多重试此类事务 120 秒,因此在竞争激烈时,请求可能耗时更长,而不是直接失败。要缩短此上限,可在 MongoClient 上设置 timeoutMS;该选项也会影响此客户端上的所有其他操作。

重试会重新执行整个操作,包括 before 数据库钩子以及接收事务的插件回调。应在 after 钩子中发送邮件和调用其他服务;该钩子只会在提交后运行一次。

独立服务器

独立 MongoDB 服务器不支持事务。使用 MongoClient 创建 db,并在不传入 client 选项的情况下将其传给适配器:

auth.ts
import { betterAuth } from "better-auth";
import { MongoClient } from "mongodb";
import { mongodbAdapter } from "@better-auth/mongo-adapter";

const client = new MongoClient("mongodb://localhost:27017/database");
const db = client.db();

export const auth = betterAuth({
  database: mongodbAdapter(db),
});

不使用事务时,如果后续写入失败,先前的写入可能仍会保留。迁移到副本集或分片集群后,传入 client 即可启用事务。请参阅 MongoDB 的事务要求。

模式生成与迁移

对于 MongoDB,我们不需要生成或迁移模式。

联接

当 Better-Auth 需要通过单个查询从多个表中获取相关数据时,数据库联接非常有用。像 /get-session、/get-full-organization 以及许多其他端点都能从此功能中大幅受益,根据数据库延迟的不同,性能提升可达 2 倍至 3 倍。

MongoDB 适配器从版本 1.4.0 开始开箱即用地支持联接。要启用此功能,请在您的 auth 配置中将 advanced.database.joins 设置为 true。

auth.ts
import { betterAuth } from "better-auth";

export const auth = betterAuth({
  advanced: {
    database: {
      joins: true,
    },
  },
});

更多信息

  • 如果您正在寻找性能改进或优化建议,请查看我们的 性能优化指南。