我正在尝试查找所有带有“ 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:文档必须仅具有字符串键,key 是0
P.S .:我尝试了其他不包含数组或复杂嵌套的查询,没有任何问题
答案 0 :(得分:0)
似乎我需要忽略数组索引,并使用不同的语法来获得结果
comment = coll.find({"info.bands.metadata."".COMMENT":"comment"})