firebase 如何为条件查询创建Firestore复合索引?

tjvv9vkg  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(106)

我使用react从我的firestore集合中获取文档,当我获取文档时,我分配了一个条件查询,查询方向根据提供的值而改变。

const getData = async () => {
    const constraints = [];

    if (price)
      constraints.push(orderBy("price", price == "1" ? "desc" : "asc"));

    if (date)
      constraints.push(orderBy("postedDate", date == "1" ? "desc" : "asc"));

    if (type)
      constraints.push(orderBy("type", type == "1" ? "desc" : "asc"));

     // there are more conditional queries here. 8 more to be exact

    const livings = collection(db, "livingPosts");
    let q = query(livings, ...constraints);

    const qSnapshot = await getDocs(q);

    const dataQ = qSnapshot.docs.map((doc) => ({
      ...doc.data(),
      id: doc.id,
    }));
    // console.log(dataQ);
    setDatas(dataQ);
  };

  useEffect(() => {
    getData();
  }, []);

正如你在上面的代码中看到的,我已经实现了条件查询.并且还有更多的查询我没有包括.所以我的问题是,我怎样才能为所有这些查询创建索引?
我用firebase提供给我的链接创建了索引。但是它让我为2个查询创建了4个复合索引。(价格和日期),顺序是

price - asc , date - asc
price - desc , date - asc
price - asc , date - desc
price - desc , date - asc

这些是索引.所以我必须创建每一个可能的索引象这些吗?如果是这样的话,我必须做的组合的数目和索引的最大数目是200.请告诉我正确的方法

cld4siwp

cld4siwp1#

那么我是否必须创建所有可能的索引
是的,您需要创建与应用可能执行的查询相对应的所有索引。
为此,您可以使用错误消息中显示的URL(这意味着您需要执行所有可能的查询,即播放所有场景),或者您可以使用Firebase(或Google Cloud)控制台手动构建它们。
对于默认的最大200个复合索引的限制,您实际上可以联系Firebase support,要求增加这个最大数目。

相关问题