firebase - firestore 删除文档的子集合不起作用
问题描述
严重难倒这一点。我正在尝试删除集合“孩子”中的嵌套记录。
“todaysEvents”是一张地图(在孩子的收藏中),我的目标是删除其中一个键/值对(event.id)。我已授予所有权限,当我运行它时,它返回该文档已成功删除但它实际上尚未被删除,因为我仍然可以在数据库中看到它。在删除之前我需要对地图做些什么特别的事情吗?我觉得这应该工作顺利......
FIRESTORE.db
.collection("kids")
.doc(event.kidId)
.collection("todaysEvents")
.doc(event.id)
.delete()
.then(data => {
console.log("Document successfully deleted!", data);
})
.catch(error => {
console.error("Error removing document: ", error);
});
解决方案
Firestore 是一个文档存储数据库。您可以使用的操作是一次查找/读取、创建、更新和删除单个和整个文档(想想:JSON 对象)。
没有 API 可以仅删除现有文档中的字段。相反,您需要读取文档(JSON 对象),修改对象(例如,从文档中删除一个元素),然后将文档写回 Firestore。
所以在你的例子中你会做类似的事情(下面的伪代码):
const removeEventId = async (kidId, todayEventsId) => {
try {
// fetch the "kids" document
let docRef = FIRESTORE.db.collection("kids").doc(kidId);
let docSnap = await docRef.get();
let docData = docSnap.data();
// remove the element that we no longer want in the document
delete docData.todaysEvents[todaysEventId];
// update the document in Firestore
await docRef.update(docData);
console.log(`Document updated with ${todaysEventId} removed!`, docData);
} catch (ex) {
console.error(`EXCEPTION while removing ${todaysEventId}:`, ex);
}
}
推荐阅读
- c++ - 为什么 glDrawElements 不为我的圆圈着色?
- sublimetext3 - Sublime Text:如何在“查找”框中键入时禁用自动滚动?
- javascript - Angular ng-model 返回未定义
- c# - 可以将文本/数据放在 ObjectListView 中列下的 groupheader 上吗?
- javascript - 通过canvas元素获取pixi.js数据
- javascript - 使用功能组件和组件输入在 React Native 中的 Next Input
- javascript - Is there a way to format a Javascript data into dd-mm-yyyy?
- c# - Get all activated fonts in Windows 10 using PowerShell
- github - how to allow 3rd party to create repo (repo transfer) in our Org without let them see our private repo?
- vue.js - Close v-edit-dialog from method within script tag