Альтернатива для итерации курсора Pymongo

1

Я прошел через многие вопросы итерации курсора, но не увидел ничего, что могло бы решить мою проблему.

У меня есть база данных формы

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

Но это очень медленно. У меня есть тысячи документов. Есть ли другие способы, как запросы для достижения результата быстрее.

Теги:
python-3.x
pymongo

1 ответ

2
Лучший ответ

Запрос на агрегацию может быть выполнен для сбора всех авторов и книг. например.

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']}]
  • 0
    Обратите внимание, что вы хотите сравнить это с текущей обработкой в памяти

Ещё вопросы

Сообщество Overcoder
Наверх
Меню