Først og fremmest find_one
vil returnere enkelt ordbog eller Ingen, hvis der ikke er noget matchende element i samlingen. Så jeg tror, at page[0]
svarer til at få værdien af sideordbog for nøglen 0
Hvis returnerede dokumenter indeholder ObjectId
som _id
du kan ikke bare bruge jsonify
fordi, ligesom ObjectId
kan ikke serialiseres med JSON. Du kan bruge noget som dette:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
eller du kan simpelthen fjerne _id
ved at kalde page.pop('_id')
Du kan også bruge bson.json_util
. Den indeholder værktøjer til konvertering mellem BSON og JSON.
from flask import Response
from bson import json_util
Og erstat derefter jsonify
med noget lignende dette:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Rediger
Hvis du vil have en kort og beskidt måde at håndtere problemet på, kan du gøre det sådan her:
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))