javascript - 需要帮助访问 Firestore 子集合?
问题描述
在编码方面我是新手(大约一年前开始自学),任何帮助将不胜感激,在此先感谢您。
我看到关于如何访问 Firestore 的子集合的堆栈溢出还有 3-4 篇其他帖子。我尝试了所有这些但没有运气,因此我将其作为一个新问题发布。
现在我的数据集设置为:collection/document.array。到目前为止还不错,因为我只需要从数组中读取该数据,然后在我的小 React 项目中使用 .reduce 和 .map 将其绘制出来,并在输入时将新数据推送到该数组。
这是我现在从 Firestore 获取数据的代码:
--- in firebase.js ----------------------------------------------------------------------
export const fire = firebase.initializeApp(config);
export const db = fire.firestore()
_________________________________________________________________________________________
--- in events-context.js ----------------------------------------------------------------
const fetchEvents = async () => {
try {
const data = await db.collection('events').get();
setEvents(data.docs.map(doc => ({ ...doc.data(), id: doc.id })));
} catch ({ message }) {
alert(`Error @ fetchEvents, Error:${message}`);
}
};
但现在我想添加编辑和删除功能,但为了做到这一点,我需要将我的数据数组执行到子集合中,以便该数组中的每个单独元素都有自己的 id,以便我以后可以定位它。所以它需要像这样设置:collection/document/sub-collection
解决方案
要访问集合内的文档,您必须知道其他来源的文档 ID。这可以通过管理字符串或映射数组中的名称来完成,然后您可以根据您的设计在应用程序中处理这些名称。
例如:一旦创建,您将拥有引用的快照,您可以将文档 ID 存储在父文档中:
db.collection("events").doc(id).update({
payers: firebase.firestore.FieldValue.arrayUnion(paySnapshot.ref.id)
})`
获得此信息后,您可以使用以下技术之一将其附加到相关文档路径。
db.collection("events").doc(id).collection("payers").doc(pay_id).get()
db.doc(\
事件/${id}/payers/${pay_id}`).get()`
我强烈建议不要在没有条件的情况下使用集合.get()
来减少可能发生的读取。limit()
where()
推荐阅读
- azure - 物联网设备流未连接
- oracle - ORA-00923: 在 Oracle APEX 中未找到预期的 FROM 关键字
- c++ - 给定使用 C++ 或 C,我如何测量在 linux 下进行线程切换需要多长时间?有可能吗?
- python - 如何让我的 A 星搜索算法更高效?
- python - Hadoop Docker 容器只能复制到 0 个节点而不是 minReplication (=1)
- c# - Android 10 Xamarin.Forms MainActivity 作为警报的全屏意图
- flutter - 如何使用 Flutter 对图像进行像素化?
- python - Pandas:选择以另一列结尾的列
- aws-cdk - AWS CDK 回滚触发器
- php - Codeigniter 中的一个控制器的 PhoneGap AJAX URL 问题,但第二个工作正常