Pymongo光标迭代的替代方案



我经历了许多光标Iterationn问题,但没有看到可以解决我的问题的问题。

我有一个表格的数据库

[{book:'A', author:'John'}, {book:'B', author:'Tony'}, {book:'C', author:'John'}...]

同一作者的多本书。

我需要的是2个阵列

authors = ['John','Tony','John']
books = ['A','B','C']

,相应的元素在两个数组中均处于相同的索引。

现在,我正在通过光标迭代获得它。

authors =[]
books =[]
cursor = collection.find()
for elem in cursor:
  authors.append(elem['author'])
  books.append(elem['book'])

这很慢。我有成千上万的文件。还有其他任何方法,例如查询以更快地实现结果吗?

可以执行聚合查询以收集所有作者和书籍。,例如

pipeline = [
    {
        '$group': { 
            '_id': None, 
            'authors': { '$push': '$author' }, 
            'books': { '$push': '$book' } 
        } 
    }
]
result = collection.aggregate(pipeline))
In [2]: print(result)
[{'_id': None, 'authors': ['John', 'Tony', 'John'], 'books': ['A', 'B', 'C']}]

最新更新