Upsert в prisma без ID создает повторяющиеся записи (ошибка обещания?)

Мне нужно вставить записи в базу данных PG из файла с 500 тыс. записей.

Поскольку файл огромен, я создаю поток чтения и используюJSONStream.parseотправлятьjsonвозражает противpipe.

Все идет нормально. Это не проблема, я просто предоставляю контекст.

После анализа объекта мне нужно вставить информацию, используяprismaно я не могу вставлять записи, если определенное поле уже есть в таблице. Итак, первое, что я думаю, это то, что я должен использоватьupsert.

Проблема в том, что это поле не является уникальным ключом этой таблицы, поэтому я не могу использовать его вwhereпунктprisma upsert.

Затем я сделал следующее:

                 await prisma.pets
              .findFirst({
                where: { name: nameFromJson },
              })
              .then(async (existing_pet) => {
                if (!existing_pet) {
                  await prisma.pets.create({
                    data: {
                      name: nameFromJson,
                      legs: numberOfLegs,
                      isAlive: isAlive,
                    },
                  })
                }
              })
              .catch((error) => {
                throw new Error(error)
              })

Моя идея состоит в том, чтобы сначала найти запись с тем же полем, а когда это обещание будет разрешено, отправить результат в другое обещание, где я могу проверить запись, и если она не существует, то просто выстрелитьcreate.

Но я продолжаю получать дубликаты в таблице.

Я хотел бы понять, что я делаю неправильно. И, конечно же, как правильно поступить в таком сценарии.

0 ответов

Другие вопросы по тегам