Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase-访问集合中的集合数据返回o.indexOf错误_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript Firebase-访问集合中的集合数据返回o.indexOf错误

Javascript Firebase-访问集合中的集合数据返回o.indexOf错误,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我目前拥有从集合中存储的文档中检索firestore数据并将其呈现给客户端的功能,但是我还需要从父文档中的集合中检索文档中的数据并呈现此数据。我知道firestore以分层方式存储数据,但我得到了以下错误: 未处理的承诺拒绝:TypeError:o.indexOf不是函数。(在“o.indexOf”(“/”)中,“o.indexOf”未定义) 从以下代码: db.collection('tickets').get().then(snapshot => { snapshot.docs.

我目前拥有从集合中存储的文档中检索firestore数据并将其呈现给客户端的功能,但是我还需要从父文档中的集合中检索文档中的数据并呈现此数据。我知道firestore以分层方式存储数据,但我得到了以下错误:

未处理的承诺拒绝:TypeError:o.indexOf不是函数。(在“o.indexOf”(“/”)中,“o.indexOf”未定义)

从以下代码:

db.collection('tickets').get().then(snapshot => {
   snapshot.docs.forEach(doc => {
     renderTickets(doc);
     db.collection('tickets').doc(doc).collection('comments').get().then(snapshot => {
        snapshot.docs.forEach(doc => {
        renderComments(doc);
      });
    });
  });
});
在此之前,我只有以下功能可以访问非嵌套文档,这很好:

    db.collection('tickets').get().then(snapshot => {
    snapshot.docs.forEach(doc => {
      renderTickets(doc); 
   });
});
My renderComments()/renderTickets()函数(它们都是相同的):


我需要在关联票据下呈现注释,并且我不希望通过硬编码名称来访问每个文档/嵌套文档,这就是为什么我在父文档中时尝试访问嵌套文档的原因。知道我哪里出错了吗?谢谢。

您正在将一个文档引用传递给tickets collection引用的
doc
方法,该方法需要一个字符串。您不需要从tickets集合“重新开始”,因为您已经有了单个ticket的文档引用,所以您应该能够执行以下操作:

db.collection('tickets').get()。然后(快照=>{
snapshot.docs.forEach(doc=>{
效果图(doc);
doc.ref.collection('comments').get()。然后(快照=>{
snapshot.docs.forEach(doc=>{
渲染文件(doc);
});
});
});
});

我理解为什么会这样,但不幸的是,它返回了以下错误:
未处理的承诺拒绝:TypeError:doc.collection不是一个函数。(在“doc.collection('comments')”中,“doc.collection”未定义)
@Jamie my bad!更新的答案应该适合您(注意
doc.ref.collection('comments')
而不是
doc.collection('comments')
snapshot.docs
是QueryDocumentSnapshot()的数组。要获取子集合,您需要一个DocumentReference(),它是通过
doc.ref
获得的。有道理吗?是的,伙计,谢谢你的帮助!不客气:)
function renderComments(doc) {

    let li = document.createElement('li');
    let comment = document.createElement('p');
    let name = document.createElement('p');
    let timestamp = document.createElement('p');

    li.setAttribute('data-id', doc.docId);
    comment.textContent = "Description: " + doc.data().comment;
    name.textContent = "Type: " + doc.data().name;
    timestamp.textContent = "Priority: " + doc.data().timestamp;

    li.appendChild(comment);
    li.appendChild(name);
    li.appendChild(timestamp);

}