Pymongo游标迭代的替代方案

时间:2018-04-03 09:43:47

标签: python mongodb python-3.x pymongo

我经历了许多游标迭代问题,但没有看到任何可以解决我问题的内容。

我有一个表格

的数据库
[{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'])

但这很慢。 我有成千上万的文件。 是否有其他方法可以更快地实现结果。

1 个答案:

答案 0 :(得分:2)

可以执行聚合查询以收集所有作者和书籍。 e.g。

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']}]