Javascript 我可以在React from firestore中以对象形式检索数据及其嵌套数据吗?

Javascript 我可以在React from firestore中以对象形式检索数据及其嵌套数据吗?,javascript,reactjs,firebase,google-cloud-firestore,Javascript,Reactjs,Firebase,Google Cloud Firestore,问题:我想检索JhonDoe中的所有集合及其嵌套集合和/或对象或对象数组格式的文档 firestore中的数据库: --- members (collection) | --- JhonDoe (documents) | --- May (collection) | --- 28 (documents)

问题:我想检索JhonDoe中的所有集合及其嵌套集合和/或对象或对象数组格式的文档

firestore中的数据库:

--- members (collection)
         |
         --- JhonDoe (documents)
              |
              --- May (collection)
                    |
                    --- 28 (documents)
                          |
                          --- expense: "1"
                          |
                          --- gain: "2"
                          |
                          --- name: "Jhon Doe"
我想要一个对象或对象数组,如:

{
   May: {
         28: {
                 expense: '1',
                 gain: '2',
                 name: 'Jhon Doe'
             }        
         },
  //June: { } 
 }
我所尝试的:

export const getMembersDailyGains = async (name) => {
  const dbName = name.replace(/\s/g, "");
  const gainsList = [];
  try {
    db.collection(`members/${dbName}`).get.then((snapshot) => {
      snapshot.docs.forEach((doc) => {
        gainsList.push(doc.data());
        console.log(gainsList);  //error logged is below
      });
    });
  } catch (error) {
    console.log(error);
  }
  return gainsList;
};
记录的错误为: 错误:FirebaseError:集合引用无效。集合引用的段数必须为奇数,但members/JhonDoe有2个

变化:

 try {
    await db
      .collection("members")
      .doc(`${dbName}`)
      .get()
      .then((doc) => {
        if (doc.exists) {
          console.log("Document data:", doc.data());
          gainsList.push(doc.data());
          console.log(gainsList);
        } else {
          // doc.data() will be undefined in this case
          console.log("No such document!");  //this is being consoled
        }
      })
      .catch((error) => {
        console.log("Error getting document:", error);
      });
  } catch (error) {
    console.log(error);
  }
  console.log(gainsList);
  return gainsList;
};
“没有这样的文件”正在受到安慰 我在React组件中安慰了gainList,它说等待承诺

谢谢你的帮助

我现在正在使用实时数据库,因为我无法更正它

//set members' daily gains
export const setMembersDailyGains = async (name, gain, expense, date) => {
  const dbName = name.replace(/\s/g, "");
  const memberGainsRef = database.ref(`dailyGains/${dbName}/${date}`);
  const gainObj = {
    date: date,
    gain: gain,
    expense: expense,
  };
  await memberGainsRef.push(gainObj);
};


//get members' daily gains
export const getMembersDailyGains = (name) => {
  const dbName = name.replace(/\s/g, "");
  const memberGainsRef = database.ref(`dailyGains/${dbName}`);
  const gainsList = [];
  try {
    memberGainsRef.on("value", function (snapshot) {
      snapshot.forEach(function (childSnapshot) {
        childSnapshot.forEach(function (cchildSnapshot) {
          cchildSnapshot.forEach(function (ccchildSnapshot) {
            const item = ccchildSnapshot.val();
            item.key = ccchildSnapshot.key;
            gainsList.push(item);
          });
        });
      });
      console.log(gainsList);
    });
  } catch (error) {
    console.log(error);
  }
  console.log(gainsList);
  return gainsList;
};

我仍然想使用firestore。

简而言之,答案是肯定的,但是StackOverflow并不是为了让您的代码为您编写。到目前为止你试过什么?你到底在说什么?我已经更新了我的问题,请看一看你当前的语法错误是
db.collection(`members/${dbName}`)。get
但应该是
db.doc(`members/${dbName}`)。get()
。你试过用
.doc(`dbName}')
代替
.doc(`${dbName}`)
?它应该是一个带有成员名称的字符串(在本例中为“JhonDoe”)。