如何使用react native向firestore中的文档添加子集合

cx6n0qe3  于 2023-02-13  发布在  React
关注(0)|答案(3)|浏览(151)

我新的React本土和消防仓库与我如此裸露。
我试图在一个名为groups的集合中创建一个文档(这很有效),一旦创建完成,我将获取所创建文档的文档ID,然后尝试在其中创建一个名为admins的子集合,然后创建一个带有当前用户ID的文档,然后将isAdmin字段设置为true。
我不知道我是否犯了一个错误或逻辑甚至不正确。
我得到了一个未处理的承诺拒绝错误和如下所示的console. logs输出
检索到的文档ID:SNPXEsZ8Bp7xQkJJtlj0
当前用户ID:vhzfudjwejxjcqhcvzve3y9meu33
[未处理的承诺拒绝:类型错误:_firebase. db.集合("组"). doc(docId).集合("管理员"). doc(用户Id). add不是函数。(在"_firebase. db.集合("组"). doc(docId).集合("管理员"). doc(用户Id). add({]

const submitGroup = async () => {
        await db
            .collection('groups')
            .add({
                userId: user.uid,
                groupName: groupName,
                groupImage: null,
                postTime: firebase.firestore.Timestamp.fromDate(new Date()),
                groupPrivacy: selectedItem,
                
            })
            .then((docRef) => {

              // get & pass the doc id created above to var 
                const docId = docRef.id;

              //pass the current user id to var
                const userId = user.uid;

                const addAddmins = async (docId, userId) => {

                    console.log('Document retreived with ID: ', docId);
                    console.log('Current User ID: ', userId);

                    await db.collection('groups')
                        .doc(docId)
                        .collection('admins')
                        .doc(userId)
                        .add({
                            isAdmin: true,
                        })
                        .then(() => {
                            //Alert success

                        }).catch((error) => {
                            console.log('Something went wrong', error)
                        })
                }
                //Call add sub collection and pass parent doc ID and current userID
                addAddmins(docId, userId)
           
            })
            .catch((error) => {
             
                console.log('Something went wrong', error)

            })

    }
p4tfgftt

p4tfgftt1#

我还没有测试这段代码,只是检查一下groupId中是否有id键。

const submitGroup = async () => {
  const userId = user.uid;

  const groupId = await db.collection("groups").add({
    userId: user.uid,
    groupName: groupName,
    groupImage: null,
    postTime: firebase.firestore.Timestamp.fromDate(new Date()),
    groupPrivacy: selectedItem
  });
  console.log("groupId:", groupId.id);
  
  const addAdmins = await db
    .collection("groups")
    .doc(groupId.id)
    .collection("admins")
    .doc(userId)
    .add({
      isAdmin: true
    });
};
kb5ga3dv

kb5ga3dv2#

好的,我设法解决了我的问题,我不得不将.add({})更改为.set({})。我猜是因为第一个查询已经创建了父集合。

vql8enpb

vql8enpb3#

我在firestore版本9上试过这个,它创建了一个名为collection的消息,ID为messageID,它还有一个名为messages的子集合,ID为subcollectionID。

const message_doc_ref = collection(db, 'message', "messageID", 'messages', "subcollectionID");
await addDoc(message_doc_ref, {data:"you data"}, { merge: true });

相关问题