Я прошел через многие вопросы итерации курсора, но не увидел ничего, что могло бы решить мою проблему.
У меня есть база данных формы
[{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']}]