python - 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 =[]
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/

相关文章:

Python:如何将 Pandas Dataframe 行值转换为单独的列?

python - python for循环中的原始步骤数

javascript - 如何在 mongodb-native findAndModify 中使用变量作为字段名?

javascript - 使用 reangular 将表单数据从 AngularJs 前端发布到 NodeJS RESTful API

python-3.x - 带魔杖的谷歌云功能停止工作

python-2.7 - 无法从 Explorer [2013] 通过 IDLE 运行 Python - IDLE 的子进程未建立连接

Python - 记录多个文件

python - 如何优化这个算法来重复查找和更新数组的最小值?

python - 在 Pandas 中,给出一个日期时间索引,包含所有工作日的行,如何确定一行是一周的开始还是一周的结束?

javascript - 与 insertOne 函数一起使用时,MongoDB 架构不插入属性