说我有以下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库可以更好地完成吗?
答案 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'})