Pymongo 使用数组索引查找查询失败,因为键只能是字符串
Posted
技术标签:
【中文标题】Pymongo 使用数组索引查找查询失败,因为键只能是字符串【英文标题】:Pymongo find query using array index failed as key can be string only 【发布时间】:2019-11-09 15:35:52 【问题描述】:我正在尝试查找所有包含“comment”字符串的文档 看起来像这样的文档中的“COMMENT”字段
"_id": "5d10aaf8130d5f9e386be977",
"info":
"files": ["filename"],
"bands": [
"metadata":
"":
"COMMENT": "comment"
]
,
"file": "filename"
我试过这个查询,一切似乎都很好
comment = coll.find(
"info":
"bands":
"$elemMatch":
"0":
"metadata":
"":
"COMMENT":
"comment"
)
如果我尝试查看光标规范,我会在其中看到“设置”属性,但我不知道为什么。
> _Cursor__spec:'info': 'bands': ... 'info':'bands': '$elemMatch': ... 'bands':'$elemMatch': '0': ...
> '$elemMatch':'0': 'metadata': ... '0':'metadata': '': ...
> 'metadata':'': 'COMMENT': set([...]) '':'COMMENT':
> set(['comment']) 'COMMENT':set(['comment'])
> 63587936:'comment'
最后,如果我尝试这样做
while (comment.next()):
print(anything)
我收到以下错误:
bson.errors.InvalidDocument: 无法编码对象: set(['comment']), 类型:
如果我更改查询的以下部分
"$elemMatch": "0":
到
"$elemMatch": 0:
甚至只是
0:
错误变为(光标保留“set”属性):
bson.errors.InvalidDocument:文档必须只有字符串键,键 为 0
P.S.:我尝试了其他不包含数组或复杂嵌套的查询没有任何问题
【问题讨论】:
您的搜索包含“评论]”(带有“]”)。是不是搞错了? 是的,我在 Stack 上写错字了,我会改正的,谢谢! 【参考方案1】:看来我需要忽略数组索引并使用不同的语法来实现结果
comment = coll.find("info.bands.metadata."".COMMENT":"comment")
【讨论】:
以上是关于Pymongo 使用数组索引查找查询失败,因为键只能是字符串的主要内容,如果未能解决你的问题,请参考以下文章