为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用批处理创建多个文档?

如何使用批处理创建多个文档?

慕盖茨4494581 2023-07-06 19:46:22
我有这段代码,我尝试使用 bacth 在我的集合中创建新字段,我想用这个条件 ((index + 1) % 500 === 0) 验证以使用提交,有什么问题吗?const myFunction = async () => {  try {    let batch = db.batch()    const batchCommits = []        await schoolList.forEach(async (school, index) => {      await ref        .doc(school.id)        .collection('mycollection')        .where('visual', '==', 'none')        .get()        .then(async (querySnapshot) => {          if (querySnapshot.empty) {            const curses = await ref              .doc(school.id)              .collection('curses')              .doc()            batch.set(curses, common)            if ((index + 1) % 500 === 0) {              batchCommits.push(batch.commit())              batch = db.batch()            }          }        })    })    batchCommits.push(batch.commit())    return Promise.all(batchCommits)  } }我收到此错误:错误:无法修改已提交的 WriteBatch。
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

我的理解是,您可以使用 for of 循环即 for(const school of Schools) 来处理结果。这很粗糙,但也许像下面这样?不太确定是否将批次合并到一个承诺中。all


如果您已经解决了这个问题,请发布您的解决方案。


    let batch = db.batch()

        

    for( const school of schoolList) {

        const myCollectionDoc =  await ref.collection('mycollection')

            .doc(school.id)

            .get()


        if(myCollectionDoc.empty) {

            const curses = await ref.doc(school.id).collection('curses').doc()

            batch.set(curses, common)

         }


        if (batch._writes.length === 500) {

            await batch.commit()

            batch = db.batch()

        }

    }

        

    if (batch._writes.length != 0) {

        await batch.commit()

    }


查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信