如何使用python在dict中包含的嵌套dicts或数组中使用mongoengine执行此类过滤器查询?

时间:2012-08-09 03:48:34

标签: python mongodb

说我有以下dict对象:

{
    "a": "value of a",
    "somedict": {
        "someinfo": [
            {
                "name": "Jordan",
                "food": [
                    "fries",
                    "coke",
                    "drink"
                ]
            }
        ]
    }
}

如果我想使用mongoengine在python中应用查询过滤器,我该怎么办?我在文档中看到你可以做的事情:

sample_objs_filter = Sample.objects(a='value of a')

但我怎么过滤说

1) "name='Jordan'" 
2)'food' contains 'fries'?

如果mongoengine不能这样做,还有其他一些mongo库可以更好地完成吗?

2 个答案:

答案 0 :(得分:9)

我建议您阅读更多关于mongodb dot notation的内容,了解如何查询/查看对象并返回匹配的文档。

由于你不能使用点作为关键字参数mongoengine遵循双下划线的django orm风格:

1) Sample.objects(somedict__someinfo__name='Jordan')
2) Sample.objects(somedict__someinfo__food='Fries')

答案 1 :(得分:1)

mongoengine点符号可以通过以下方式在mongoengine中使用: Sample.objects(__raw__ =" name_of_db_field 密钥":" value_to_match&#34 ;)

说你的班级是:

Class data(Document):
   field = DictField(db_field="dbfield")

你的存储dict:

{
    "a": "value of a",
    "somedict": {
        "someinfo": [
            {
                "name": "Jordan",
                "food": [
                    "fries",
                    "coke",
                    "drink"
                ]
            }
        ]
    }
}

键充当对象属性,因此可以这样查询:

data.objects(field__a = "value of a")

相同
data.objects(__raw__ = {'dbfield.a' : 'value of a'})

对于嵌套项目,__用作点。实施例

data.objects(field__somedict__someinfo__name="Jordan")

读取与:

相同
data.objects(__raw__ = {'dbfield.somedict.someinfo.name' : 'Jordan'})