You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore如何通过where函数查询数组类型字段的指定下标值?

问题原因

你当前的查询不生效有两个核心原因:

  1. Firestore 原生不支持数组字段[下标]这种语法直接查询数组指定位置的元素
  2. 你的查询条件值写的是字符串"true",但存储的weekdays数组元素是布尔类型true,类型不匹配也无法命中结果

不需要拆成独立字段,更优的实现方案

你完全不用把7天状态拆成7个独立字段,推荐用枚举值数组+array-contains查询的方案,实现更简洁,查询效率也更高:

  1. 调整存储结构:不再存布尔数组,而是直接把商品在售的星期对应getDay()返回的数字存入数组,比如你给出的示例[true, true, true, false, false, true, false](周日、周一、周二、周五在售),调整后存储为:
availableWeekdays = [0, 1, 2, 5]
  1. 调整查询逻辑:直接用Firestore原生支持的array-contains运算符查询即可:
// assume date.getDay() is 5
const q = query(
  collection(db, "bakerys", `${bakery.id}`, "products"), 
  where("availableWeekdays", "array-contains", date.getDay())
);
const querySnapshot = await getDocs(q);

这个方案不需要额外创建复合索引,查询性能和单独字段查询完全一致,后续维护也比多个独立字段更方便。


如果你不想修改现有布尔数组结构

如果必须保留现有的weekdays布尔数组结构,再考虑拆成独立字段的方案:把7天的状态分别存为weekday0到weekday6的布尔字段,查询逻辑调整为:

const q = query(
  collection(db, "bakerys", `${bakery.id}`, "products"), 
  where(`weekday${date.getDay()}`, "==", true)
);

这个方案也能正常生效,只是字段数量更多,后续调整逻辑的成本比枚举数组方案高。


内容的提问来源于stack exchange,提问作者Maximilian Dietel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:15:03