8

假设我有以下 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 库可以更好地完成这个吗?

4

2 回答 2

14

我建议阅读更多关于 mongodb 的点表示法,了解如何查询/查看对象并返回匹配的文档。

由于您不能使用点作为关键字参数,因此 mongoengine遵循双下划线的 django orm 样式:

1) Sample.objects(somedict__someinfo__name='Jordan')
2) Sample.objects(somedict__someinfo__food='Fries')
于 2012-08-13T10:45:09.233 回答
6

mongoengine 点符号可以通过以下方式在 mongoengine 中使用: Sample.objects( __raw__= " name_of_db_field . key ":"value_to_match")

假设你的班级是:

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

你存储字典:

{
    "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'})
于 2018-03-09T23:19:33.680 回答