猿问

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

我有这段代码,我尝试使用 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。


慕盖茨4494581
浏览 126回答 1
1回答

倚天杖

我的理解是,您可以使用 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()    }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答