Firestore写入含嵌套列表的字典报InvalidArgument:400错误如何解决
错误原因
- 你直接传入了包含嵌套数组的原始字典,Firestore不支持数组直接嵌套数组的结构,也不会自动把嵌套数组转换为你需要的键值对Map结构
- 代码中
storeReference.set({dictionaryy}, merge=True)多套了一层{},如果dictionaryy是你的原始字典变量,该写法会传入{字典变量名: 字典内容}的错误嵌套结构 - 你调用了集合的
set()方法,Firestore中set()是文档(DocumentReference)的方法,集合本身没有该方法,路径引用错误。
修复步骤
1. 转换原始字典结构
先把嵌套数组的原始字典转换为符合Firestore要求的Map结构:
# 你的原始字典 raw_dict = { 'Position': [['Teaching', '10'], ['Supervisor', '3']], 'Major': [['Arts', '1'], ['Accounting', '6']] } converted_data = {} for field_name, nested_list in raw_dict.items(): # 每个子列表的第一个元素作为键,第二个作为值 converted_data[field_name] = {item[0]: item[1] for item in nested_list}
转换后converted_data的结构和你预期的Firestore存储结构完全一致。
2. 修正Firestore写入逻辑
修正路径引用,操作对应文档写入数据:
# 替换末尾的u'stats'为你实际需要的文档ID,可自定义 doc_ref = db.collection(u'coll').document(u'info').collection(u'colname').document(u'stats') # 直接传入转换后的数据,不要额外套{} doc_ref.set(converted_data, merge=True)
内容的提问来源于stack exchange,提问作者jpy
相关产品推荐
相关产品推荐

