Pertama-tama find_one
akan mengembalikan kamus tunggal atau Tidak Ada jika tidak ada elemen yang cocok dalam koleksi. Jadi menurut saya page[0]
setara dengan mendapatkan nilai kamus halaman untuk kunci 0
Jika dokumen yang dikembalikan berisi ObjectId
sebagai _id
anda tidak bisa begitu saja menggunakan jsonify
karena, seperti ObjectId
bukan JSON serializable. Anda dapat menggunakan sesuatu seperti ini:
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
atau Anda cukup menghapus _id
dengan memanggil page.pop('_id')
Anda juga dapat menggunakan bson.json_util
. Ini berisi alat untuk konversi antara BSON dan JSON.
from flask import Response
from bson import json_util
Dan kemudian ganti jsonify
dengan sesuatu yang mirip dengan ini:
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Sunting
Jika Anda ingin cara yang singkat dan kotor untuk menangani masalah, Anda dapat melakukannya seperti ini:
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))