Отсутствует необходимое значение при установке массива
Я использую Prisma upsert и получаю сообщение об отсутствии требуемого значения, когда пытаюсь установить одно из полей, которое является типом массива, в частности numeric[]
.
Я использую Prisma версии 2.6.0
Данные попадают в базу данных для всех, кроме нескольких строк, и я получаю сообщение об ошибке, которое Prisma выдает в этих строках при выполнении upsert.
Ошибка, которую я получаю от prisma, связана с массивом, который я пытаюсь установить:
PrismaClientKnownRequestError:
Invalid `prisma.node.upsert()` invocation in
/usr/development/project/dist/project-tsdx.cjs.development.js:604:46
Missing a required value at `Mutation.upsertOnenode.create.nodeCreateInput.temperature.nodeCreatetemperatureInput.set`
at PrismaClientFetcher.request (/usr/development/project/node_modules/@prisma/client/runtime/index.js:1:227598)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async Promise.all (index 3366) {
code: 'P2012',
meta: {
path: 'Mutation.upsertOnenode.create.nodeCreateInput.temperature.nodeCreatetemperatureInput.set'
}
}
Объект, на котором возникает исключение, имеет следующие значения:
threw this node:
Node {
name: 'ahostname',
state: 'NONE',
cores: -1,
busycpus: 0,
queue: 'NONE',
rack: 'NONE',
jobs: '',
temperature: [ -1 ],
tempupdatetime: '1970-01-01T00:00:00.000Z',
power: 0,
powerupdatetime: '1970-01-01T00:00:00.000Z',
uptime: 20,
loadavg1: 0,
loadavg5: 0.01,
loadavg15: 0.05,
cpuusage: 0.2,
updatetime: '2020-09-01T17:29:02.000Z'
}
Моя схема для модели узла выглядит следующим образом:
model node {
node String @id
state String
cores Int
busycpus Int
queue String
rack String
jobs String
temperature Float[]
tempupdatetime DateTime
power Float
powerupdatetime DateTime
uptime Int
loadavg1 Float
loadavg5 Float
loadavg15 Float
cpuusage Float
updatetime DateTime
}
Наконец, фактический код, который я использую для установки этого массива, приведен ниже:
import { PrismaClient } from '@prisma/client'
import { NodeStats } from '../sources/nodeStats'
const prisma = new PrismaClient()
export default async (nodes: NodeStats) => {
const { timestamp, ...others } = nodes
//@ts-ignore
let currentNode
const promises = Object.keys(others).map(async nodeName => {
try {
const node = nodes[nodeName]
currentNode = node
let { temperature, name, ...others } = node
if (temperature.length === 1 && temperature[0] === 0){
node.temperature = [-1]
temperature = [-1]
}
// if(!temperature) console.log(currentNode)
await prisma.node.upsert({
create: { ...others, node: name, temperature: {set: [...temperature]}},
where: { node: nodeName },
update: { ...others, node: name, temperature: { set: [...temperature] } },
})
} catch (e) {
console.error("threw this node:", currentNode)
console.error(e)
}
})
return Promise.all(promises)
}
Все Node
у брошенных есть одна общая черта: их temperature
ценность [0]
. Я пытался изменить это на[-1]
но это не остановило возникновение ошибки. Действительно озадачен тем, что здесь происходит, любые советы будут оценены.
1 ответ
Я написал несколько шутливых тестов, чтобы определить причину этого, и оказалось, что это было вызвано передачей [0, null]
. После исправления набора данных проблема исчезла.