Получить массив строк из запроса Pymongo

Мне нужно получить массив со значениями из поля 'colname'. Я не могу вернуть курсор, просто массив значений.

Есть ли способ запросить этот массив без необходимости зацикливания курсора? Я чувствую, что это пустая трата ресурсов обработки.

Прямо сейчас я делаю это:

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
headers = client['headers']

entomo = headers.entomo

entomo_data = entomo.find()
entomo_array = []
for data in entomo_data:
    entomo_array.append(data['colname'])

Тогда я верну entomo_array,

2 ответа

Решение

Если поле 'colname' имеет разные значения или если вас не интересуют повторяющиеся значения, вы можете использовать отдельную функцию. Для вашего примера:

entomo_array = entomo.find().distinct('colname')

Вы можете сделать это с .aggregate() метод по $group с помощью ваших документов None

cursor = entomo.aggregate([
    {'$group': {
        '_id': None, 
        'data': {'$push': '$colname'}
    }}
])

Оттуда вы просто потребляете курсор, используя next,

entomo_array = next(cursor)['data']

Но если 'colname' является уникальным в коллекции, вы можете просто использовать distinct метод.

entomo_array = entomo.distinct('colname')
Другие вопросы по тегам