首页 > 解决方案 > 如何在 Firebase Firestore 的文档中检索和存储 doc.id?

问题描述

我想将这两个 doc.id 都存储在下面的文档位置,以便以后可以重用它们来访问文档。我怎样才能找到它们中的每一个并将它们存储到一个变量中?

例如:我必须在代码中稍后的函数中读取此文档,因此我将存储两个 doc.ids。这是文档路径:db.collection('posts').doc(uid).collection('userPosts').doc(random id generated by Firebase). 如何将uid和“随机 id”存储在两个不同的变量中?

这是读取子集合中的每个文档并将其以 HTML 格式呈现为 li 的代码片段。所以每个 li 都是一个文档,我需要每个 li 的两个 doc.id:

    firebase.auth().onAuthStateChanged(function(user) {

    var query = db.collectionGroup("userPosts")

    query.get().then(querySnapshot => {
        setupPosts(querySnapshot.docs)
    })

    const posts = document.querySelector('.posts');

const setupPosts = (data) => {
    let html = '';
    data.forEach(doc => {
        var docRefIDpost = docRef.id
        const post = doc.data();
        const picURL = post.picURL;
        let li = `<li class="post">
            <div class="title">${post.title}</div>
            <div class="content">${post.content}</div>
            <button class="comment" onclick="comment('${docRefIDpost}')">Comment</button>
            <button class="like" onclick="like('${docRefIDpost}')">Like</button>`;
        
        li += (post.picURL ? `<img class="img" src="${post.picURL}" onclick="openImage('${picURL}')">` : ``);
        li += `</li><br></br>`;
        html += li
    })
    
    posts.innerHTML = html;
}

额外的信息:

这是我运行评论功能后的数据库图片。如您所见,它只是创建一个新文档,而不使用实际存储帖子的现有文档。

数据库

这里还有评论功能:

function comment(docRefIDpost) {

    var modalcomment = document.getElementById("modal-comment");

    modalcomment.style.display = "block";

    var submitcomment = document.getElementById("submitcomment");

    submitcomment.addEventListener('click', (e) => {

        var commentinput = document.getElementById("comment");

        console.log(docRefIDpost)

        db.collection('posts').doc(docRefIDpost).collection('userPosts').doc(docRefIDpost).collection('comments').add({

            comment: commentinput.value,

        })

    })

}

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


要在您的 HTML 中也拥有 的文档 ID userPosts,您将从以下位置获取它们doc

const setupPosts = (data) => {
    let html = '';
    data.forEach(doc => {
        const docRefIDPost = doc.id;
        const post = doc.data();
        const picURL = post.picURL;
        let li = `<li class="post">
            <div class="title">${post.title}</div>
            <div class="content">${post.content}</div>
            <button class="comment" onclick="comment('${docRefIDpost}')">Comment</button>
            <button class="like" onclick="like('${docRefIDpost}')">Like</button>`;
        
        li += (post.picURL ? `<img class="img" src="${post.picURL}" onclick="openImage('${picURL}')">` : ``);
        li += `</li><br></br>`;
        html += li
    })
    
    posts.innerHTML = html;
}

推荐阅读