skip to Main Content

So I am using Prisma for the first time and my provider is mongodb and when I want to create a model it throws me an error

Invalid `prisma.user.create()` invocation:


  Prisma needs to perform transactions, which requires your MongoDB server to be run 
as a replica set. https://pris.ly/d/mongodb-replica-set

I am using Prisma in a nextjs app and I put the code inside the API pages

My DATABASE_URL is mongodb://localhost:27017/threadzees

Code :

await prisma.user.create({
      data: {
        username,
        email,
        avatar: "1",
        createdAt: new Date(),
      },
    });

How do I fix this issue?

3

Answers


  1. I’m Running Mongodb 4+ version I solved it as below
    As the error describes you need to create a replica. Either you can use cloud based Mongo or locally you can create a replica like below.

    # Open new terminal execute below command
     mongod --port=27001 --dbpath=. --replSet=rs0
    # Open another terminal window execute below command
    mongo.exe
    # Then below command
    rs.initiate( {    _id : "rs0", members: [ { _id: 0, host: "localhost:27001" } ] })
    # your new connection String
    mongodb://localhost:27001
    
    1. –dbpath : Is your data path directory (above command points to current directory)
    2. –replSet=rs0 : Replica name
    3. Read more @ https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/

    Happy coding 🙂

    Login or Signup to reply.
  2. You can use "prisma": "2.26.0" and "@prisma/client": "2.26.0" instead of your current version. They don`t need a replica set.
    Also you have to use @default(dbgenerated()) instead of @default(auto()) both with "npx [email protected].0 generate" for this old version.

    Login or Signup to reply.
  3. If you are using the local mongodb service, locate the mongod.cfg file (usually in Program FileMongoDBServer[version number]bin) and configure it to use replica set. Add the following lines:

    replication:
       replSetName: rs0
    

    Then launch mongosh from a terminal and initiate the replica set servers using rs.initiate(). Your code should be working fine now.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search