Javascript 我可以在React from firestore中以对象形式检索数据及其嵌套数据吗?
问题:我想检索JhonDoe中的所有集合及其嵌套集合和/或对象或对象数组格式的文档 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)
--- 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”)。