我在运行 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时才会返回此错误? - 在文档中找不到此限制在哪里?
限制记录为:
请注意 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 个“分离”,而不仅仅是其中一个。