如何根据内容获取 Firestore 文档 ID?

How to get a Firestore document ID based on its content?

我正在尝试找到一种通过单击事件删除 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);
    });

});

谢谢

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 事件处理程序中获取用户的所有文档 --- 假设您有 HTML 个元素,其 id 为 'content1'、'content2'、'content3'等,它是显示文档内容的地方。你可以尝试这样的事情:

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 );
  })

}

在这样做时,您可以像这样 sessionStorage.getItem('content2') 简单地引用文档 ID。

请注意,在我列出的任何示例中,都需要做大量准备工作才能尽可能顺利进行。但是,您是否同意程序员仅仅是为了使后续使用更容易而在需要几分钟的事情上花费数小时的人? :)