设置数组时缺少必需的值
Posted
技术标签:
【中文标题】设置数组时缺少必需的值【英文标题】:Missing a required value when setting array 【发布时间】:2020-12-20 20:57:46 【问题描述】:我正在使用 Prisma upsert 并在尝试设置其中一个字段(即数组类型,特别是 numeric[]
)时收到关于缺少所需值的错误。
我使用的是 Prisma 2.6.0 版
数据正在进入数据库,除了少数几行之外,当执行 upsert 时,Prisma 在这些行上抛出错误。
我从 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'
我的 Node 模型架构如下:
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
s 都有一个共同点,它们的temperature
值是[0]
。我试图将其更改为[-1]
,但这并没有阻止错误的发生。真的很困惑这里发生了什么,任何提示将不胜感激。
【问题讨论】:
你可以试试temperature: set : [...]
而不是temperature: [...]
吗?基本上移除 set
和 set
本身的外部块。
@oneturkmen 感谢您的回复!在这种情况下,TS red 用以下Type 'number[]' has no properties in common with type 'nodeUpdatetemperatureInput'.ts(2559)
强调温度
嗯。也许将set
保留在update
字段中,但将其从create
字段中删除?看起来它试图创建一个带有字段 set
的新变量,但该字段不存在。
@oneturkmen 不幸的是,如果它从任一位置删除,它都不喜欢它。虽然温度本身是可选的。
【参考方案1】:
我写了一些玩笑的测试来确定这个问题的原因,结果证明这是由传入[0, null]
引起的。修复数据集后,这个问题就解决了。
【讨论】:
以上是关于设置数组时缺少必需的值的主要内容,如果未能解决你的问题,请参考以下文章
SigningConfig“发布”缺少必需的属性“keyPassword”