我试图运行一个删除函数,它应该是相当直接的,但我没有得到它。
我引用了子集合中的文档,但它似乎没有被正确引用。当我硬编码答案文档id时,它执行该功能,但当我尝试引用时,它不起作用。
我将文档信息存储在一个数组中,但我需要在数组中循环查找与帖子匹配的id。一旦存储了引用,我就很难从get答案中抓取引用。
代码如下:
const [getAnswer, setGetAnswer] = useState([]);
useEffect(() => {
let mounted = true;
db.collection("questions")
.doc(questionId)
.collection("answer")
.orderBy("timestamp", "desc")
.onSnapshot((snapshot) => {
if (mounted) {
setGetAnswer(
snapshot.docs.map((doc) => ({
id: doc.id,
answers: doc.data(),
}))
);
}
});
return () => (mounted = false);
}, []);
const handleDeletePost = (e) => {
if (user) {
db.collection("questions")
.doc(questionId)
.collection("answer")
.doc(getAnswer.id)
.delete();
}
};
const answerMenuId = "primary-answer-account-menu";
const answerRenderMenu = (
<Menu
anchorEl={anchorEl}
anchorOrigin={{ vertical: "top", horizontal: "right" }}
id={answerMenuId}
keepMounted
transformOrigin={{ vertical: "top", horizontal: "right" }}
open={isMenuOpen}
onClose={handleMenuClose}
>
<MenuItem onClick={handleMenuClose}>Edit</MenuItem>
<MenuItem onClick={handleMenuClose} onClick={handleDeletePost}>
Delete
</MenuItem>
</Menu>
);
对于更多的上下文,我想删除一个基于文档id的应答文档。以下是数据库的屏幕截图:
您的getAnswer
是一个数组,它不由id
索引。它是一个对象数组,每个对象都具有属性id
和answers
,查询按时间戳返回文档的顺序。
getAnswer.id
在这种情况下是没有意义的,它完全不清楚什么user
,askId
和id
甚至在您显示的上下文中。
您正在处理什么事件?您如何知道事件指示的答案?是按钮吗?选择复选框?单选按钮?
还要注意:QuerySnapshot中的每个DocumentSnapshot都包含doc.ref.path,您可以直接将其传递给db.doc(refPath).delete()
-无需构造.collection().doc().collection()
等。
我使用FirebaseFirestore的包装包,它总是在我的记录对象中包含doc.ref.path
作为refPath,正是出于这个原因,您还可以解析它来查找父文档,等等
假设answerId
是一个保存要删除的答案的文档ID的变量,则您要查找:
const answersDocumentRef = db.doc("answer/"+answerId);
或者:
const answersDocumentRef = db.doc(`answer/${answerId}`);
或者(没有回答DocumentRef
):
db.collection("questions")
.doc(questionId)
.collection("answer")
.doc(answerId)
.delete();
或者:
db.doc(`questions/${questionId}/answer/${answerId}`).delete();
在我的集合的SnapshotListener中,我使用以下命令循环遍历文档: 在 for 循环中的每个文档中,让我们称之为 ,我在 Cloud Firestore 上还有另一个文档集合。我想检索内子集合中的所有文档(每个文档只有一个字符串字段)。我能够做一个来获取本身,我用它来获取字符串字段,但我不知道如何获取其子集合中的文档。
我如何删除一个特定的文档中的一个集合在fiRecovery使用反应? 我在这里和谷歌上看了看,但我没有发现任何内在相关的东西。 我只是设法从我的集合中删除索引[0]的文档。 这状态idDoc接收所有id文档。 如果我只是传递. doc(idDoc),我会得到以下错误: Firebase Error: Function Collection Reference.doc()要求它的第一个参数是非空字符
我的FiRecovery数据库中有一个名为Reports的集合,我已经在其中添加了文档。但我现在的问题是我想在报表中添加一个带有子集合的文档,有什么想法吗?
我正在使用Java开发一个Android应用程序,我使用firestore数据库,我有一个名为用户位置的集合,其结构类似于照片: 分贝 我的问题是,当一个用户改变他的位置或一个新用户进入一个已经存在的位置(其他用户有相同的位置)时,它会创建一个新文档(如在“oran, algerie”中)。当我添加新用户并更新文档时,我想使用,但问题是我无法以正常方式检索根集合的所有文档: 它返回null。我尝试
据我所知,我可以使用云函数以某种方式实现这一点?我试着阅读云函数,但我很迷路。是否有一种方法可以触发云函数,在用户更新帖子时删除子集合中的所有文档?
为了查询子集合和父文档,我对firest的文档及其最佳实践有一些问题。我试图使用Typecript在我的Firebase函数中进行查询。 DB: ├── 用户(集合) │ └── 用户(ID为的文档) │ │ └── 计划(子集合) 我有一个数组中的用户ID列表,我需要从用户文档和当前文档的子集合计划中收集信息。 但是如何从用户文档和子集合(计划)文档(当前)中获取数据,我不知道在场景中最有效的查