从 Firestore 查询返回无效参数错误

问题描述 投票:0回答:1

我在运行 Firestore 查询时收到以下错误。

[firestore/invalid-argument] 客户端指定了无效参数。 请注意,这与失败前提条件不同。无效的论点 表示无论状态如何都有问题的论点 系统(例如,无效的字段名称)。

这是我的查询;

export async function getFilteredData(category, filters, city_id) {
  let venues = [];
  let lastVenue;
  let query = firestore()
    .collection("venues")
    .where("active", "==", true)
    .where("city_id", "==", city_id);

  if (category) {
    query = query.where("category.id", "==", category);
  }

  if (filters?.subcategories.length > 0) {
    query = query.where("subcategory.id", "in", filters.subcategories);
  }

  if (filters?.districts.length > 0) {
    query = query.where("district.id", "in", filters.districts);
  }

  if (filters?.prices.length > 0) {
    console.log(filters.prices);
    query = query.where("price", "in", filters.prices);
  }

  if (filters?.tags.length > 0) {
    query = query.where("tags", "array-contains-any", filters.tags);
  }

  if (filters?.order) {
    query = query.orderBy(filters.order, "desc");
  } else {
    query = query.orderBy("created_at", "desc");
  }

  await query
    .limit(20)
    .get()
    .then((snapshot) => {
      lastVenue = snapshot.docs[snapshot.docs.length - 1];
      snapshot.forEach((doc) => {
        venues.push({ id: doc.id, ...doc.data() });
      });
    });

  return { venues, lastVenue };
}

只有子类别、地区或价格数组总数超过12时才会返回此错误? - 在文档中找不到此限制在哪里?

javascript firebase react-native google-cloud-firestore
1个回答
0
投票

限制记录为:

请注意 in、not-in 和 array-contains-any 的以下限制:

  • Cloud Firestore 通过 or、in 和 array-contains-any 运算符支持逻辑 OR 查询。这些查询仅限于 基于查询的析取范式的 30 个析取。
  • 每个析取(或组)最多可以使用一个 array-contains 子句。您不能将 array-contains 与 array-contains-any 组合在一起 同样的析取。
  • 不能将 not-in 与 not equals 结合起来!=。
  • not-in 支持最多 10 个比较值。

问题可能是您的所有

in
过滤器(子类别、地区、价格)之间总共有超过 30 个“分离”,而不仅仅是其中一个。

© www.soinside.com 2019 - 2024. All rights reserved.