我经历了许多游标迭代问题,但没有看到任何可以解决我问题的内容。
我有一个表格
的数据库[{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'])
但这很慢。 我有成千上万的文件。 是否有其他方法可以更快地实现结果。
答案 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']}]