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查询API很痛苦吗?_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 使用firebase查询API很痛苦吗?

Javascript 使用firebase查询API很痛苦吗?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我开始在firestore学习firebase 我花了比我想要的更多的时间来理解引用类型,并试图让它与引用公文包类别的简单查询一起工作 代码如下: try { const portfolioSnap = await db.collection("portfolio").get(); let portfolioDoc = portfolioSnap.docs; let categoriesRef = []; portfolioDoc.forEach(p => { ca

我开始在firestore学习firebase

我花了比我想要的更多的时间来理解引用类型,并试图让它与引用公文包类别的简单查询一起工作

代码如下:

try {
  const portfolioSnap = await db.collection("portfolio").get();
  let portfolioDoc = portfolioSnap.docs;
  let categoriesRef = [];
  portfolioDoc.forEach(p => {
    categoriesRef.push(p.data().category.get());
  });
  let categories = await Promise.all(categoriesRef);
  let portfolio = [];
  portfolioDoc.map((p, i) => {
    let portfolioObject = {
      ...p.data(),
      category: categories[i].data().name
    };
    portfolio.push(portfolioObject);
  });
  return portfolio;
} catch (error) {
  console.warn("ERROR: ", error);
}
我不确定这是否有意义

我试图为每个
投资组合
文档获取
类别
,但我觉得这是设计过度,或者我完全用错了方法


如果我有我觉得会让事情变得更糟的图片或文件的参考资料,这就不算了。。。嗯,不漂亮。

这里没什么奇怪的。这就是nosql数据库的工作方式(因为没有联接操作,文档之间也没有明确的关系,只有您定义的关系)。

这里没有什么奇怪的。这就是nosql数据库的工作方式(因为没有联接操作,除了您定义的文档之外,文档之间也没有任何明确的关系)。

LGTM,因此您有两个单独的公文包和类别集合。在获取公文包列表时,您可以循环此列表并获取相应的类别。你完全可以这样做。您可以通过提取所有类别并将它们映射到客户端来优化它。它会将请求从n减少到1,但是响应大小会更大。您是说在客户端获取它们,还是说如何将请求减少到1,因为现在它对每个公文包类别都有一个请求。a:获取所有类别,B:获取所有公文包,C:您将类别映射到公文包,但没有每个Portfolio的类别请求。在这种情况下,您将如何执行C?我对每个投资组合中的类别都有一个引用,但为了获得数据,我需要在所有投资组合记录中进行循环,以获得单个类别。c:循环投资组合,每个投资组合循环所有类别,如果达到匹配的类别,则打破内部循环。LGTM,因此,对于公文包和类别,您有两个单独的集合。在获取公文包列表时,您可以循环此列表并获取相应的类别。你完全可以这样做。您可以通过提取所有类别并将它们映射到客户端来优化它。它会将请求从n减少到1,但是响应大小会更大。您是说在客户端获取它们,还是说如何将请求减少到1,因为现在它对每个公文包类别都有一个请求。a:获取所有类别,B:获取所有公文包,C:您将类别映射到公文包,但没有每个Portfolio的类别请求。在这种情况下,您将如何执行C?我对每个投资组合中的类别都有一个引用,但为了获得数据,我需要在所有投资组合记录中进行循环,以获得单个类别C:你循环投资组合,每个投资组合循环所有类别,如果你达到了匹配的类别,你就打破了内部循环。我有一种感觉,这就是答案。我有一种感觉,这就是答案。