我经历了许多光标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']}]