Allereerst find_one retourneert één woordenboek of Geen als er geen overeenkomend element in de verzameling is. Dus ik denk dat page[0] is gelijk aan het verkrijgen van de waarde van het paginawoordenboek voor sleutel 0
Als geretourneerde documenten ObjectId . bevatten als _id je kunt niet zomaar jsonify gebruiken omdat, zoals ObjectId is niet JSON serialiseerbaar. Je kunt zoiets als dit gebruiken:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
of je kunt eenvoudig _id . verwijderen door page.pop('_id') . te bellen
Je kunt ook bson.json_util gebruiken
. Het bevat tools voor conversie tussen BSON en JSON.
from flask import Response
from bson import json_util
En vervang dan jsonify met iets soortgelijks als dit:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Bewerken
Als je een korte en vuile manier wilt om met het probleem om te gaan, kun je het als volgt doen:
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))