设置数组时缺少必需的值

问题描述

我正在使用prisma upsert,并在尝试设置一个字段(一种数组类型,特别是*ngIf)时遇到有关缺少必需值的错误

我正在使用prisma版本2.6.0

除少数行外,所有数据都进入数据库,执行更新程序时,prisma在这些行上抛出错误

我从pyramida收到的错误与我要设置的数组有关:

numeric[]

发生异常的对象具有以下值:

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'
  }
}

我对Node模型的架构如下:

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,temperature: { set: [...temperature] } },}) } catch (e) { console.error("threw this node:",currentNode) console.error(e) } }) return Promise.all(promises) } 都有一个共同点,它们的Node的值为temperature。我试图将其更改为[0],但这并没有阻止错误的发生。真的很困惑这里发生了什么,任何提示将不胜感激。

解决方法

我写了一些笑话测试来确定其原因,结果证明这是由于传入[0,null]引起的。修复数据集后,此问题得以解决。