有没有办法在python eve中查询嵌入式文档?
例如:我有以下回应:
网址:http://127.0.0.1:5000/shipments/57fafd5bb9211367f5b2006e
{
"_updated": "Mon, 10 Oct 2016 02:30:51 GMT",
"track": "57fafd5bb9211367f5b2006d",
"ref_no": "268771821909",
"_created": "Mon, 10 Oct 2016 02:30:51 GMT",
"_id": "57fafd5bb9211367f5b2006e",
"_etag": "af5af366b7dba18456be6112c59172b1dfe21593"
}
以下是嵌入文档设置为1时的响应: 网址:http://127.0.0.1:5000/shipments/57fafd5bb9211367f5b2006e?embedded= {" track":1}
{
"_updated": "Mon, 10 Oct 2016 02:30:51 GMT",
"track": {
"_updated": "Mon, 10 Oct 2016 02:37:57 GMT",
"tracks": [
{
"status": "MS",
"remark": "None",
"datetime": "Mon, 10 Oct 2016 02:30:51 GMT"
},
{
"status": "DP",
"remark": "Not Good",
"datetime": "Mon, 10 Oct 2016 02:31:51 GMT"
}
],
"_created": "Mon, 10 Oct 2016 02:30:51 GMT",
"_id": "57fafd5bb9211367f5b2006d",
"_etag": "9eac811c400d9c8a9507ae83988daeb5a5ec5c6c"
},
"ref_no": "268771821909",
"_created": "Mon, 10 Oct 2016 02:30:51 GMT",
"_id": "57fafd5bb9211367f5b2006e",
"_etag": "af5af366b7dba18456be6112c59172b1dfe21593"
}
跟踪架构:
schema = {
'awb_number' : {'type' : 'string'},
'tracks' : {'type':'list',
'schema' : { 'type':'dict',
'schema' : {
'status' : {'type':'string', 'allowed': STATUS},
'remark' : {'type':'string', 'allowed': REMARK},
'datetime' : {'type':'string'},
}
}
}
}
现在我想查询status
数组中最后一个元素的tracks
。
Python中的类似内容:
if tracks[-1]['status'] == 'DP': print 'Do this'.
但我不确定如何在网址中查询相同内容。
答案 0 :(得分:0)
我想查询tracks数组中最后一个元素的状态。 Python中这样的东西
在所有数据库交互和嵌入(如果有)之后,您需要获取所查询内容的响应。您可以通过添加event hook来实现。
您可以尝试类似
def do_something_with_result(resource, response):
'''
resource: contains who called (in your case, shipments probably)
response: the data which you get back after the fetching
'''
响应将是一个包含数据的字典,您可以在其中搜索track
。现在,需要将此功能作为事件添加到当前的flask应用中。
from flask import current_app as app
app.on_fetched_item += do_something_with_result
请注意,这将在获取每个项目后触发。如果您想专门用于一种特定资源on_fetched_item_<resource_name>
。然后,前一个函数的签名更改为do_something_with_result(response)
答案 1 :(得分:0)
我已经尝试过了,并且行得通。
client = MongoClient('localhost', 27017)
db = client['test']
collection = db["interests"]
r=collection.find({})
for data in r:
for i in data['mylist']:
if i['status']=='no':
print("done")
我的兴趣模式如下:
interests={
'cache_control': 'max-age=10,must-revalidate',
'cache_expires': 10,
'schema':{
'interest':{
'type':'objectid',
'required':True,
'data_relation': {
'resource': 'works',
# make the owner embeddable with ?embedded={"owner":1}
'embeddable': True
},
},
'mylist':{
'type':'list',
'schema':{
'type':'dict',
'schema':{
'myfield':{
'type':'string'
},
'status':{
'type':'string'
}
}
}
}
}
}
希望这可以解决您的问题。