javascript - 我可以从 Firestore 中以对象形式在 React 中检索数据及其嵌套数据吗?
问题描述
问题:我想检索 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。
解决方案
推荐阅读
- android - Retrofit2 和 Moshi:发送没有嵌套对象的 JSON
- php - 为什么这个加法函数有时在 PHP 中不起作用?
- python - 项目有两个用户表的 Django 中的完整性错误?
- java - 不使用通配符编写 Collections.addAll(Collection c, T... elements)
- java - 使用增强的 for 循环搜索 LinkedList
- android - PlayStore - 以下 APK 或应用程序包可在 64 位设备上使用,但只有本机 32 位代码:1
- java - 为什么我的 Reference(URI "") 解析为 ds:Manifest,而不是根元素,因为它应该?
- ios - EventKit 崩溃:“冻结警报属于错误类别:EKPersistentAlarm”
- azure-devops - 构建工件保留设置被忽略
- r - 使用 tibble/as_tibble 显示所有更改的名称