【问题标题】:Pymongo find query using array index failed as key can be string onlyPymongo 使用数组索引查找查询失败,因为键只能是字符串
【发布时间】: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 上写错字了,我会改正的,谢谢!

标签: mongodb python-2.7 pymongo


【解决方案1】:

看来我需要忽略数组索引并使用不同的语法来实现结果

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

【讨论】:

    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2021-08-26
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多