我正在使用 React native 和 react-native-firebase
我的目标是一次将多个文档(对象)添加到集合中。目前,我有这个:
const array = [
{
name: 'a'
},{
name: 'b'
}
]
array.forEach((doc) => {
firebase.firestore().collection('col').add(doc);
}
对于对集合进行的每次更新,这会触发其他设备上的更新。如何将这些文档批处理在一起以进行一次更新?
您可以创建批量写入,例如
var db = firebase.firestore();
var batch = db.batch()
在你数组中添加更新
array.forEach((doc) => {
var docRef = db.collection("col").doc(); //automatically generate unique id
batch.set(docRef, doc);
});
最后你必须承诺
batch.commit()
您可以将多个写入操作作为包含 set()、update() 或 delete() 操作的任意组合的单个批处理执行。一批写入以原子方式完成,可以写入多个文档。
var db = firebase.firestore();
var batch = db.batch();
array.forEach((doc) => {
batch.set(db.collection('col').doc(), doc);
}
// Commit the batch
batch.commit().then(function () {
// ...
});
Web API 版本 9 略有不同,文档包括以下示例:
import { writeBatch, doc } from "firebase/firestore";
// Get a new write batch
const batch = writeBatch(db);
// Set the value of 'NYC'
const nycRef = doc(db, "cities", "NYC");
batch.set(nycRef, {name: "New York City"});
// Update the population of 'SF'
const sfRef = doc(db, "cities", "SF");
batch.update(sfRef, {"population": 1000000});
// Delete the city 'LA'
const laRef = doc(db, "cities", "LA");
batch.delete(laRef);
// Commit the batch
await batch.commit();
来自数据库的批处理还具有一个创建函数,该函数可在集合中添加新文档,如果已存在文档,则会引发错误。 我们只需要对文档的引用。请注意,此功能存在于Firebase的管理SDK中。
const batch = db.batch();
await users.map(async (item)=> {
const collectionRef = await db.collection(COLLECTION_NAME).doc();
batch.create(collectionRef, item);
});
const result = await batch.commit();
批量写入最多可以包含 500 个操作。批处理中的每个操作将单独计入您的云还原使用量。
注: 对于批量数据输入,请使用具有并行单独写入的服务器客户端库。批处理写入的性能优于序列化写入,但不比并行写入好。应使用服务器客户端库进行批量数据操作,而不是移动/Web SDK。