如何用SurrealDB.wasm批量更新维度下Unit的is_base属性
解决SurrealDB中批量更新维度关联单位的问题
问题分析
你尝试的UPDATE dimension:myDimensionID.units.* SET is_base = false无法生效,核心原因分为两种场景:
- 若
dimension.units是指向unit表的记录引用数组,该语句仅会修改dimension文档内部的引用对象副本,不会同步更新unit表中的实际记录。 - 若
units是嵌入在dimension中的对象数组,SurrealDB的.*语法无法直接遍历数组元素并修改属性。
解决方案
场景1:units是unit表的记录引用数组
通过子查询获取目标维度关联的所有unit ID,再批量更新unit表:
UPDATE unit WHERE id IN (SELECT value FROM dimension:myDimensionID.units) SET is_base = false;
场景2:units是dimension中的嵌入对象数组
使用array::map遍历数组,结合merge修改每个元素的is_base属性:
UPDATE dimension:myDimensionID SET units = array::map(units, fn($unit) => merge($unit, {is_base: false}));
结果验证
执行修改后,可通过以下语句确认结果:
-- 验证unit表记录(场景1) SELECT * FROM unit WHERE id IN (SELECT value FROM dimension:myDimensionID.units); -- 验证dimension文档中的嵌入数组(场景2) SELECT units FROM dimension:myDimensionID;
内容的提问来源于stack exchange,提问作者Ólavur Nón
相关产品推荐
相关产品推荐

