<p>有效的方法是使用聚合框架,使用服务器端操作创建“_id”和“tag data”列表。这也减少了通过网络发送的数据量,以及用于在客户端解码文档的时间和内存。在</p>
<p>您需要<a href="https://docs.mongodb.com/manual/reference/operator/aggregation/group/" rel="nofollow">^{<cd1>}</a>文档并使用<a href="https://docs.mongodb.com/manual/reference/operator/aggregation/push/" rel="nofollow">^{<cd2>}</a>累加器运算符返回<code>_id</code>列表和{<cd4>}列表。当然,<a href="https://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate" rel="nofollow">^{<cd5>}</a>方法提供了对聚合管道的访问。在</p>
<pre><code>cursor = collection.aggregate([{
'$group': {
'_id': None,
'ids': {'$push': '$_id'},
'tags': {'$push': '$tag-data'}
}
}])
</code></pre>
<p>然后使用<a href="https://api.mongodb.com/python/current/api/pymongo/command_cursor.html#pymongo.command_cursor.CommandCursor" rel="nofollow">^{<cd7>}</a>上的<a href="https://api.mongodb.com/python/current/api/pymongo/command_cursor.html#pymongo.command_cursor.CommandCursor.next" rel="nofollow">^{<cd6>}</a>方法检索数据,因为我们按<code>None</code>分组,因此光标只保存一个元素。在</p>
^{pr2}$
<p>之后,只需调用函数并<a href="https://docs.python.org/3.6/library/functions.html#zip" rel="nofollow">^{<cd9>}</a>结果。在</p>
<pre><code>clusters = cluster_text(data['tags'])
doc_clusters = zip(data['ids'], clusters)
</code></pre>