使用带有 react-native 的模拟器时,Firestore 批量删除不起作用

Firestore batch delete don't work while using emulator with react-native

我想在生产中使用 firestore 模拟器之前尝试一些代码,我基本上想检索一个集合文档,对它们进行排序,然后在集合中再次设置它们: 我在执行批量删除时遇到此错误:

[Error: [firestore/permission-denied] The caller does not have permission to execute the specified operation.]

代码:

useEffect(() => {
        (async () => {
            await admin_sortUserRanksDB()
        })()
    }, [])
    const admin_sortUserRanksDB = async () => {
        const usersData = await admin_getUserDataDBAndClean()
        populateUserCollection(usersData)
    }

    const admin_getUserDataDBAndClean = async () => {
        try {
            const querySnapshot = await firestore()
                .collection('users')
                .orderBy('experience_amount', 'desc')
                .get();
            let rank = 1;
            let newDataUsers = [];
            for (const user of querySnapshot.docs) {
                const userData = user.data();
                userData.rank = rank;
                newDataUsers.push(userData)
                rank++
            }
                await deleteUserCollection(querySnapshot)
           
            return newDataUsers;
        } catch (error) {
            if (!__DEV__) {
                crashlytics().log(
                    `error getUserDataDB() 
                          userActions.js ===>> ${error.message}`
                );
            }
            console.log('error getUserDataDB ', error)
            return null
        }
    }

    const deleteUserCollection = async (usersQuerySnapshot) => {
        // Create a new batch instance
        const batch = firestore().batch();

        usersQuerySnapshot.forEach(documentSnapshot => {
            batch.delete(documentSnapshot.ref);
        });
        console.log('==============')
        return batch.commit();
    }

    const populateUserCollection = usersData => {
        if (usersData) {
            const batch = firestore().batch();
            usersData.forEach(doc => {
                let docRef = firestore()
                    .collection('users')
                    .doc(); //automatically generate unique id
                batch.set(docRef, doc);
            });
            batch
                .commit()
                .catch(error => {
                    console.log('error populating users', error)
                });
        }
    }

将问题发布到 react-native-firebase 存储库后,我被建议修改我的规则以打开(仅在本地)并且批量删除有效。

我使用了 firestore.rules 文件中的 allow read, write: if true

link to issue on GitHub