Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pymongo游标迭代的替代方案_Python_Mongodb_Python 3.x_Pymongo - Fatal编程技术网

Python Pymongo游标迭代的替代方案

Python Pymongo游标迭代的替代方案,python,mongodb,python-3.x,pymongo,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 =[] b

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

我有一个表格数据库

[{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'])
但这是非常缓慢的。 我有成千上万的文件。
有没有其他类似查询的方法可以更快地获得结果。

可以执行聚合查询来收集所有作者和书籍。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']}]