Pymongo使用数组索引查找查询失败,因为键只能是字符串

时间:2019-06-27 15:06:28

标签: mongodb python-2.7 pymongo

我正在尝试查找所有带有“ 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 .:我尝试了其他不包含数组或复杂嵌套的查询,没有任何问题

1 个答案:

答案 0 :(得分:0)

似乎我需要忽略数组索引,并使用不同的语法来获得结果

    comment = coll.find({"info.bands.metadata."".COMMENT":"comment"})