<p>首先<code>find_one</code>将返回单个字典,如果集合中没有匹配的元素,则返回None。所以我认为<code>page[0]</code>相当于为键<code>0</code>获取页面字典的值</p>
<p>如果返回的文档包含<code>ObjectId</code>作为<code>_id</code>,则不能简单地使用<code>jsonify</code>,因为<code>ObjectId</code>是不可JSON序列化的。
您可以使用以下内容:</p>
<pre><code>jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
</code></pre>
<p>或者您可以通过调用<code>page.pop('_id')</code>简单地删除<code>_id</code></p>
<p>您也可以使用<a href="http://api.mongodb.org/python/current/api/bson/json_util.html">^{<cd10>}</a>。它包含用于BSON和JSON之间转换的工具</p>
<pre><code>from flask import Response
from bson import json_util
</code></pre>
<p>然后将<code>jsonify</code>替换为类似的内容:</p>
<pre><code>return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
</code></pre>
<p><strong>编辑</strong></p>
<p>如果你想用简短而肮脏的方式处理问题,你可以这样做:</p>
<pre><code>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))
</code></pre>