Първо find_one
ще върне единичен речник или Няма, ако няма съответстващ елемент в колекцията. Така че мисля, че page[0]
е еквивалентно на получаване на стойност на речника на страницата за ключ 0
Ако върнатите документи съдържат ObjectId
като _id
не можете просто да използвате jsonify
защото, като ObjectId
не може да се сериализира в JSON. Можете да използвате нещо подобно:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
или можете просто да премахнете _id
чрез извикване на page.pop('_id')
Можете също да използвате bson.json_util
. Съдържа инструменти за конвертиране между BSON и JSON.
from flask import Response
from bson import json_util
И след това заменете jsonify
с нещо подобно на това:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Редактиране
Ако искате кратък и мръсен начин за справяне с проблема, можете да го направите по следния начин:
from bson import json_util, ObjectId
import json
#Lets create some dummy document to prove it will work
page = {'foo': ObjectId(), 'bar': [ObjectId(), ObjectId()]}
#Dump loaded BSON to valid JSON string and reload it as dict
page_sanitized = json.loads(json_util.dumps(page))