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

如何在Datastore模式的Firestore中使用Keys执行IN查询

问题原因与解决方案

问题根源在于App Engine老版db模块的GQL语法和Cloud控制台的Firestore Datastore模式GQL语法不兼容,两者规则存在差异:

  • 第一个写法报错:db.GqlQuery不支持Key(<kind>, <ID>)这种函数式键引用,老API的GQL必须用__key__指代实体键,同时IN子句的结构也不符合老GQL要求。
  • 第二个写法报错:老GQL中IN子句的正确格式是属性 IN :参数,你把参数和字段的顺序写反了,而且也没使用正确的键属性__key__。

正确写法

根据你的需求,分两种场景处理:

场景1:references是已构造好的db.Key对象列表

直接将键列表作为参数传入,使用__key__属性匹配:

g = db.GqlQuery("SELECT * FROM <kind> WHERE __key__ IN :1", references)

场景2:references是ID字符串/数字列表

先将ID转换为db.Key对象,再执行查询:

# 先转换ID为Key对象
key_list = [db.Key("<kind>", item) for item in references]
# 执行查询
g = db.GqlQuery("SELECT * FROM <kind> WHERE __key__ IN :1", key_list)

补充说明

Cloud控制台的GQL是基于Firestore Datastore模式的语法,支持Key()函数和X in Y的写法;而老版db模块的GQL遵循传统App Engine Datastore的语法规则,仅支持__key__指代键,且IN子句必须以属性 IN :参数的形式传递列表参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:18