React Native Expo Firebase v9.9.x Firestore数组添加元素方法
往Firestore文档的data数组添加元素的实现方法
要给my-collection集合下用户文档的data数组添加元素,你需要用到Firestore的updateDoc函数,配合arrayUnion操作符实现数组的原子更新(避免并发写入冲突),具体步骤如下:
1. 导入所需方法
除你已有的getFirestore、getAuth、doc外,还需导入updateDoc和arrayUnion:
import { getFirestore, doc, updateDoc, arrayUnion } from 'firebase/firestore'; import { getAuth } from "firebase/auth";
2. 编写添加元素的代码
复用你之前获取用户文档引用的逻辑,调用updateDoc完成数组更新:
// 类组件内的代码... const firestoreDb = getFirestore(); const user = getAuth().currentUser; const userDocRef = doc(firestoreDb, "my-collection", user.uid); // 定义要添加的新元素 const newDataItem = { prop1: "3", prop2: "5" }; // 执行数组更新操作 updateDoc(userDocRef, { data: arrayUnion(newDataItem) }) .then(() => console.log("元素已成功添加到data数组")) .catch(err => console.log("更新失败:", err));
关键说明
arrayUnion会自动跳过数组中已存在的相同元素(基于对象内容比对),保证数组元素不重复。- 如果需要允许添加重复元素,需先读取当前文档的
data数组,手动追加新元素后再写回:
import { getFirestore, doc, updateDoc, getDoc } from 'firebase/firestore'; import { getAuth } from "firebase/auth"; // ...获取userDocRef逻辑同上 getDoc(userDocRef) .then(docSnap => { if (docSnap.exists()) { const currentData = docSnap.data().data || []; currentData.push(newDataItem); return updateDoc(userDocRef, { data: currentData }); } }) .then(() => console.log("重复元素已添加")) .catch(err => console.log("更新失败:", err));
内容的提问来源于stack exchange,提问作者Anno
相关产品推荐
相关产品推荐

