MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Usando mongo con FLASK e python

Innanzitutto find_one restituirà un singolo dizionario o Nessuno se non ci sono elementi corrispondenti nella raccolta. Quindi penso che page[0] equivale a ottenere il valore del dizionario di pagina per la chiave 0

Se i documenti restituiti contengono ObjectId come _id non puoi semplicemente usare jsonify perché, come ObjectId non è serializzabile JSON. Puoi usare qualcosa del genere:

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

oppure puoi semplicemente rimuovere _id chiamando page.pop('_id')

Puoi anche utilizzare bson.json_util . Contiene strumenti per la conversione tra BSON e JSON.

from flask import Response 
from bson import json_util

E poi sostituisci jsonify con qualcosa di simile a questo:

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

Modifica

Se vuoi un modo breve e sporco di affrontare il problema puoi farlo in questo modo:

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