Python中如何用FireO查询嵌套模型列表中符合条件的数据?
解决FireO中嵌套列表的条件查询问题
问题原因
你之前的查询失效是因为array_contains操作符的作用是匹配整个数组元素(即完整的InnerModel对象),而非元素内部的单个字段。当你需要查询数组中是否存在某个对象满足特定字段条件时,不能直接用array_contains配合字段路径。
正确查询方式(单个字段匹配)
如果只需要检查嵌套对象的单个字段(比如field1等于指定值),可以直接通过字段路径使用==操作符,Firestore会自动遍历数组,返回包含至少一个满足条件元素的文档。
修改后的代码:
items = ( OuterModel.collection .filter("field2.field1", "==", "value") .get() )
多字段匹配场景(可选)
如果需要匹配嵌套对象的多个字段(比如同时要求field1="value"和其他字段满足条件),则需要使用array_contains并传入完整的InnerModel实例(注意必须包含所有对应字段,Firestore会严格匹配整个对象):
# 构造匹配的嵌套对象实例 target_inner = InnerModel(field1="value", other_field="other_value") items = ( OuterModel.collection .filter("field2", "array_contains", target_inner) .get() )
验证说明
对于你提供的文档结构:
collection: outer_model another_field: 123 field2: 0: field1: value1 1: field1: value2 2: field1: value
使用第一种查询方式会正确返回该OuterModel对象,因为数组中存在field1为value的元素。
内容的提问来源于stack exchange,提问作者Orestis Zekai
相关产品推荐
相关产品推荐

