FaunaDB如何无需读取全量数组对已有数组执行追加、删除更新
FaunaDB 数组原子更新实现方案
Fauna 原生支持无需读取完整数组的原子级数组更新操作,可直接替代你提到的 Firestore arrayUnion 能力,全程不需要提前查询目标文档内容,也不存在并发修改冲突问题。
核心功能实现
1. 等价于 Firestore arrayUnion(去重追加元素)
如果需要和 Firestore arrayUnion 效果完全一致,往数组追加元素且自动忽略已存在的重复项,使用 Union 函数即可:
FQL 原生写法
collection(COL).byId(DOC).update({ data: Union(.data, [DATA]) })
如果不需要去重,直接追加任意元素,使用 Append 函数:
collection(COL).byId(DOC).update({ data: Append(DATA, .data) })
2. React Native 项目使用示例
先安装 Fauna JS SDK:
npm install fauna
业务代码调用示例:
import { Client, fql } from 'fauna'; // 初始化客户端,生产环境请通过安全配置渠道获取密钥,不要硬编码在代码中 const client = new Client({ secret: '你的Fauna访问密钥', endpoint: 'https://db.fauna.com', }); // 封装数组更新方法 const unionUpdateArray = async (collectionName, docId, insertValue) => { try { const query = fql` collection(${collectionName}).byId(${docId}).update({ data: Union(.data, [${insertValue}]) }) `; const res = await client.query(query); return res.data; } catch (err) { console.error('数组更新失败:', err); throw err; } }
3. 等价于 Firestore arrayRemove(删除指定元素)
如果需要从数组中删除指定元素,无需读取完整数组,使用 Difference 函数即可:
collection(COL).byId(DOC).update({ data: Difference(.data, [DATA]) })
内容的提问来源于stack exchange,提问作者Aakash Rathee
相关产品推荐
相关产品推荐

