我正在尝试通过click事件删除Firestore文档的方法。
这是我到目前为止所拥有的。 x
是我从Firestore获得的文档ID。但是如何根据页面显示的内容动态获取ID更改?这样用户可以删除他们想要的内容。
var deleteContent = document.getElementById('delete');
deleteContent.addEventListener('click', function(e) {
// get current document ID
x = 'poOjcQce2iiKzp2FaFVA'
var getId = db.collection("checkin").doc(x);
getId.delete().then(function() {
console.log(" successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
});
谢谢
答案 0 :(得分:0)
Firebase Cloud Firestore允许您perform simple and compounded queries。本质上,您可以在db.collection(<COLLECTION>).where()
子句中提供条件,该条件将过滤与该条件匹配的所有文档。
出于说明目的,假设a
集合中的文档遵循以下结构:{ id, '123', name: 'test', color: 'red' }
。如果要获取所有红色的文档,只需调用db.collection('a').where('color', '==', 'red')
,然后您就可以迭代到该文档中以处理符合该条件的每个文档。
此外,在您的特定情况下,假设您的文档结构为{ id, content }
,则可以尝试执行以下操作:
var deleteContent = document.getElementById('delete');
deleteContent.addEventListener('click', function(e) {
// get current document ID
let docToDelete = db.collection("checkin").where('content', '==', 'CONTENT_GOES_HERE')
x = docToDelete.id;
var getId = db.collection("checkin").doc(x);
getId.delete().then(function() {
console.log(" successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
});
但是,一种更简单的方法是,只要读取特定文档(例如本地存储或会话存储),就将文档ID存储在应用程序中的某个位置。因此,您可以在需要时参考文档ID。例如,假设您在onLoad事件处理程序中获取了用户的所有文档---假设您具有ID为'content1','content2','content3'等的HTML元素,并且它是内容所在的位置显示了您的文件。您可以尝试如下操作:
let userId = 123;
[...].onload = () => {
// Get all of the documents belonging to this user
let i = 0;
let docs = [];
let documents = db.collection('posts').where('userId', '==', userId);
documents.forEach(doc => {
document.getElementById(`content${i}`).innerHTML = JSON.stringify(doc.data()); // Just stringifying to be certain
/**
* Extra step to add the document id in the sessionStorage so that we can refer to it later
*/
htmlId = 'content' + i;
sessionStorage.setItem(htmlID, doc.id );
})
}
这样做,您可以简单地引用文档ID,例如sessionStorage.getItem('content2')
。
请注意,在我列出的任何示例中,都需要进行繁重的准备工作才能使此操作尽可能顺利。但是,您是否同意程序员只是为了花更多时间在花几分钟时间才能在以后的使用中变得更简单的人? :)