Prisma + MongoDB -> 副本集

Baa*_*gan 6 localhost mongodb mongodb-replica-set prisma

错误Invalid "prisma.user.create()". Prisma needs to perform transactions, which requires your MongoDB server to be run as a replica set.

我将 Nx ( nx.dev ) 与 MongoDB/Express 和 Prisma 一起使用。

ren*_*min 8

使用 docker 的本地实例

可以使用易于使用的docker 映像来创建单个实例副本

  • 拉取图像docker pull prismagraphql/mongo-single-replica:5.0.3
  • 运行图像
docker run --name mongo \
      -p 27017:27017 \
      -e MONGO_INITDB_ROOT_USERNAME="monty" \
      -e MONGO_INITDB_ROOT_PASSWORD="pass" \
      -d prismagraphql/mongo-single-replica:5.0.3
Run Code Online (Sandbox Code Playgroud)
  • 连接 URL 应该是这样的
DATABASE_URL="mongodb://monty:pass@localhost:27017/db_name?authSource=admin&directConnection=true"
Run Code Online (Sandbox Code Playgroud)

您必须提供 authSource=admin 选项,否则身份验证将失败

MongoDB 阿特拉斯

  • 创建一个具有所有默认值的免费集群
  • 记下用户名、密码和主机名
  • URL 应该是这样的
DATABASE_URL="mongodb+srv://username:password@cluster_name.random_string.net/db_name?retryWrites=true&w=majority"
Run Code Online (Sandbox Code Playgroud)

请注意,官方文档目前遵循之前用于本地实例的格式,但这里不包含端口号并具有 +srv 后缀,如果没有它,我会遇到一些问题。

如果您想使用文档中使用的格式,那么您必须提供选项 ssl=true,并且对于主机名,您必须使用主集群,它看起来像 random_string.mongodb.net:27017,您可以在概述选项卡中找到它单击您的集群名称


Baa*_*gan 5

显然,在长时间面临连接 Prisma 和 MongoDB(本地)的连续问题之后,我们有 3 种方法来解决这个问题。您必须使用DockerMongoDB Atlas

Docker - Docker
MongoDB Atlas - MongoDB 副本

诗。您的 MongoDB URL 环境应该如下所示 -> mongodb://localhost:27017/<your-db-name>?retryWrites=true&w=majority

我决定最终选择选项 3. 从 MongoDB 跳转到 PostgreSQL,它没有任何副本问题,但没有 noSQL :)

  • @user3226932 他们可能正在研究这个问题,并且有一个我没有尝试的解决方案。[Github 问题](https://github.com/prisma/prisma/issues/11860#issuecomment-1044695589)。Prisma 文档建议使用 atlas/Docker 来解决相同的错误 [PrismaDocs](https://www.prisma.io/docs/concepts/database-connectors/mongodb#error-transactions-are-not-supported-by-此部署)。 (2认同)