反应firebase firestore插入json

Posted

技术标签:

【中文标题】反应firebase firestore插入json【英文标题】:react firebase firestore insert json 【发布时间】:2021-07-03 17:20:06 【问题描述】:

我正在使用 react with firebase firestore 插入一个完整的集合,其中包含 firebase firestore 中尚不存在的文档。

但是我的代码没有插入任何集合,我也没有收到任何错误,好像什么都没发生一样。

这是返回我的 json 的代码

createJson.js

const jsonArray = [name:"Bill" , age : "5" ,name:"Jom" , age : "3" ]
return jsonArray;

插入Json.js

import 'firebase/firestore';
const db = firebase.firestore();
export const insertJson = (jsn)=>
    
  try
    jsn.forEach(itm=>
      let id = db.collection("doctors").doc().id;
       db
      .collection("doctors")
      .doc(id)
      .set(itm)
      .then(doc=>
        console.log("Doc inserted with " +doc.id);
      )
    );
  catch(err)
    console.log("Error : " +err);
  


App.js

useEffect(()=>
   const j = createJson();
   insertJson(j);
,[])

所以换句话说,我的脚本不会创建包含文档的集合。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您应该使用 Firestore add() 方法和 Promise.all(),如下所示:

export const insertJson = (jsn) => 
    try 
      const promises = [];
      jsn.forEach((itm) => 
        promises.push(db.collection('doctors').add(itm));
      );
      Promise.all(promises).then((results) => 
        console.log(results.length + ' doctors added');
      );
     catch (err) 
      console.log('Error : ' + err);
    

或者,map():

export const insertJson = (jsn) => 
    try 
      Promise.all(jsn.map((itm) => db.collection('doctors').add(itm))).then(
        (results) => 
          console.log(jsn.length + ' doctors added');
        
      );
     catch (err) 
      console.log('Error : ' + err);
    


如果医生人数少于 500 人,您也可以使用batched write。

export const insertJson = (jsn) => 
    try 
      const batch = db.batch();
      jsn.forEach((itm) => 
        const docRef = db.collection('doctors').doc();
        batch.set(docRef, itm);
      );
      batch.commit().then((results) => 
        console.log('doctors added');
      );
     catch (err) 
      console.log('Error : ' + err);
    

【讨论】:

以上是关于反应firebase firestore插入json的主要内容,如果未能解决你的问题,请参考以下文章

Firestore/Firebase 模拟器未运行

来自 Firebase Firestore 的 Android 反应式列表

添加Firebase Firestore对象进行本机反应

firebase(firestore)和vuejs + vuefire的非常奇怪的反应性问题

React Hooks + Firebase Firestore onSnapshot - 正确使用带有反应钩子的 Firestore 监听器

在本机反应中获取和返回 Firestore 集合