假设我有以下dict对象:
{
"a": "value of a",
"somedict": {
"someinfo": [
{
"name": "Jordan",
"food": [
"fries",
"coke",
"drink"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如果我想使用mongoengine在python中应用查询过滤器,我该怎么办?我在文档中看到你可以做的事情:
sample_objs_filter = Sample.objects(a='value of a')
Run Code Online (Sandbox Code Playgroud)
但我怎么过滤说
1) "name='Jordan'"
2)'food' contains 'fries'?
Run Code Online (Sandbox Code Playgroud)
如果mongoengine不能这样做,是否有其他mongo库更好地完成这个?
Ros*_*oss 11
我建议阅读更多关于mongodb的点符号,了解如何查询/查看对象并返回匹配的文档.
因为你不能使用点作为关键字参数mongoengine遵循双下划线的django orm风格:
1) Sample.objects(somedict__someinfo__name='Jordan')
2) Sample.objects(somedict__someinfo__food='Fries')
Run Code Online (Sandbox Code Playgroud)
小智 5
所述mongoengine点表示法可以mongoengine内以下面的方式被使用:Sample.objects(__raw__=“ name_of_db_field。键‘:’value_to_match”)
说你的班级是:
Class data(Document):
field = DictField(db_field="dbfield")
Run Code Online (Sandbox Code Playgroud)
你存储字典:
{
"a": "value of a",
"somedict": {
"someinfo": [
{
"name": "Jordan",
"food": [
"fries",
"coke",
"drink"
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
键充当对象属性,因此可以这样查询:
data.objects(field__a = "value of a")
Run Code Online (Sandbox Code Playgroud)
读作一样
data.objects(__raw__ = {'dbfield.a' : 'value of a'})
Run Code Online (Sandbox Code Playgroud)
对于嵌套项目,__作为点工作。例子
data.objects(field__somedict__someinfo__name="Jordan")
Run Code Online (Sandbox Code Playgroud)
读作相同:
data.objects(__raw__ = {'dbfield.somedict.someinfo.name' : 'Jordan'})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3559 次 |
| 最近记录: |