我经历了许多游标迭代问题,但没有发现任何可以解决我问题的方法。

我有一个形式的数据库

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

关于python - Pymongo光标迭代的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49626941/

10-12 04:33