如何在 Firebase 中向集合添加多个文档



我正在使用 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。

相关内容

  • 没有找到相关文章