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

Google Firestore查询昨日数据报错及结果不符问题求助

Firestore查询昨日数据的问题解决

核心问题及修正

1. 查询结果不符合预期的原因

你原代码里犯了一个低级错误:把字符串'start0'传给了where条件,而不是实际的时间变量。这导致查询条件完全无效,自然会返回所有记录。另外时间范围的计算可以更简洁准确。

2. 消除警告的方法

SDK提示的警告是因为你用了旧版的位置参数调用where,现在官方推荐使用filter关键字参数配合FieldFilter类来构建查询条件。

修正后的完整代码

from datetime import datetime, timedelta
import pytz
from google.cloud.firestore import FieldFilter

# 计算昨日UTC时区的起始和结束时间
yesterday = datetime.utcnow().date() - timedelta(days=1)
# 昨日UTC零点时刻(带时区信息,和Firestore的datetime字段匹配)
start_time = pytz.utc.localize(datetime(yesterday.year, yesterday.month, yesterday.day))
# 今日UTC零点,作为昨日数据的结束边界(用<而非<=,避免包含今日零点的数据)
end_time = start_time + timedelta(days=1)

# 构建正确的查询,消除警告
docs_all = db.collection('collection')\
    .where(filter=FieldFilter('created', '>=', start_time))\
    .where(filter=FieldFilter('created', '<', end_time))\
    .stream()

for doc in docs_all:
    print(doc.to_dict())

额外说明

  • 如果你的Firestore中created字段存储的是毫秒级时间戳数字,而非datetime类型,那需要把时间转成对应格式:
    start_timestamp = int(start_time.timestamp() * 1000)
    end_timestamp = int(end_time.timestamp() * 1000)
    docs_all = db.collection('collection')\
        .where(filter=FieldFilter('created', '>=', start_timestamp))\
        .where(filter=FieldFilter('created', '<', end_timestamp))\
        .stream()
    
  • 确保created字段的时间是UTC时区的,否则会出现时间偏移导致查询结果不准。

内容的提问来源于stack exchange,提问作者new-to-snake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:53:26