Först och främst find_one
returnerar enstaka ordbok eller Ingen om det inte finns något matchande element i samlingen. Så jag tror att page[0]
motsvarar att få värdet av sidordbok för nyckel 0
Om returnerade dokument innehåller ObjectId
som _id
du kan inte bara använda jsonify
eftersom, som ObjectId
kan inte serialiseras med JSON. Du kan använda något sånt här:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
eller så kan du helt enkelt ta bort _id
genom att anropa page.pop('_id')
Du kan också använda bson.json_util
. Den innehåller verktyg för konvertering mellan BSON och JSON.
from flask import Response
from bson import json_util
Och ersätt sedan jsonify
med något liknande detta:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Redigera
Om du vill ha ett kort och smutsigt sätt att hantera problemet kan du göra det så här:
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))