如何在Directus流程中更新多个条目并为每个条目设置不同值?
Directus数组批量更新条目不生效的解决方案
问题原因
Directus默认的「Update Item」操作仅支持单个对象格式的负载,无法直接解析数组形式的批量更新请求,所以你提交的数组负载会被忽略,导致目标字段未更新。
两种可行解决方案
方案1:使用「Run Script」操作实现批量更新
替换原有的「Update Item」为「Run Script」操作,编写简单脚本循环数组内的每个条目,调用Directus内置SDK完成更新:
// 遍历负载数组,逐个更新invoice条目 for (const item of $payload) { await directus.items('invoice').update(item.id, { temp: item.temp }); }
配置说明:
- 确保脚本的「Payload」设置为你的数组数据(比如直接引用触发器输出或上游操作的结果)
- 脚本会自动处理数组中的每个对象,按id匹配并更新对应字段
方案2:使用「Loop」操作实现无代码批量更新
如果不想写代码,可以通过流程的循环组件拆分批量操作:
- 添加「Loop」操作,设置「Loop Through」为你的数组负载(例如
{{ $trigger.payload }}) - 在「Loop」内部添加「Update Item」操作:
- 集合选择
invoice - 「Item ID」填写
{{ $loop.item.id }}(引用当前循环条目的id) - 「temp」字段值填写
{{ $loop.item.temp }}(引用当前循环条目的temp值)
- 集合选择
这样每次循环会单独更新一个条目,实现批量效果。
内容的提问来源于stack exchange,提问作者gremo
相关产品推荐
相关产品推荐

