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

Pymongo使用find查询嵌套字段报TypeError:string indices must be integers

问题原因

你出现报错不是find方法使用错误,是构造查询筛选条件的语法不符合规范:

  • 你写的mycol['segmentos'[{'etiquetas'[{'categoria'}]}]]属于完全错误的Python语法:'segmentos'是字符串类型,你直接给字符串传入字典作为索引,自然触发TypeError: string indices must be integers报错。
  • Pymongo查询嵌套字段不需要套集合对象mycol的索引,直接用MongoDB标准的点分隔符拼接嵌套字段路径作为查询条件的键即可。
正确实现代码

如果你的segmentos、etiquetas是数组类型,MongoDB的点查询会自动匹配数组内符合条件的元素,无需额外操作。如果只需要统计符合条件的文档数量,无需遍历计数,直接调用count_documents方法效率更高:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["test"]
mycol = mydb["a_test"]

# 嵌套字段查询条件写法:用点拼接字段层级路径
query = {"segmentos.etiquetas.categoria": "3"}

# 高效统计数量写法
count = mycol.count_documents(query)
print(count)

# 如果需要遍历获取文档做后续处理的写法
i = 0
for doc in mycol.find(query):
    # 这里可添加对单条文档的处理逻辑
    i += 1
print(i)

补充说明

  • 如果需要匹配数组内同一个元素同时满足多个条件,再使用$elemMatch操作符,单个字段匹配的场景直接用上述点查询即可。
  • 如果你的categoria字段在数据库中存储的是数字类型而非字符串,把查询条件里的"3"改为3即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:42:01