MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Verwendung von Mongo mit FLASK und Python

Als erstes find_one gibt ein einzelnes Wörterbuch oder None zurück, wenn es kein übereinstimmendes Element in der Sammlung gibt. Ich denke also, dass page[0][code> entspricht dem Abrufen des Werts des Seitenverzeichnisses für den Schlüssel 0

Wenn zurückgegebene Dokumente ObjectId enthalten als _id Sie können nicht einfach jsonify verwenden weil, wie ObjectId ist nicht JSON-serialisierbar. Sie können so etwas verwenden:

jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))

oder Sie können _id einfach entfernen durch Aufruf von page.pop('_id')

Sie können auch bson.json_util verwenden . Es enthält Tools zur Konvertierung zwischen BSON und JSON.

from flask import Response 
from bson import json_util

Und ersetzen Sie dann jsonify mit etwas Ähnlichem wie diesem:

return Response(
    json_util.dumps({'page' : make_public_page(page)}),
    mimetype='application/json'
)

Bearbeiten

Wenn Sie das Problem kurz und schmutzig lösen möchten, können Sie es folgendermaßen tun:

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))